{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 项目：用逻辑回归预测泰坦尼克号幸存情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分析目标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "此数据分析报告的目的是，基于泰坦尼克号乘客的性别和船舱等级等属性，对幸存情况进行逻辑回归分析，从而能利用得到的模型，对未知幸存情况的乘客，根据属性预测是否从沉船事件中幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 简介"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 泰坦尼克号（英语：RMS Titanic）是一艘奥林匹克级邮轮，于1912年4月首航时撞上冰山后沉没。泰坦尼克号是同级的3艘超级邮轮中的第2艘，与姐妹船奥林匹克号和不列颠号为白星航运公司的乘客们提供大西洋旅行。\n",
    "\n",
    "> 泰坦尼克号由位于北爱尔兰贝尔法斯特的哈兰·沃尔夫船厂兴建，是当时最大的客运轮船，由于其规模相当一艘现代航空母舰，因而号称“上帝也沉没不了的巨型邮轮”。在泰坦尼克号的首航中，从英国南安普敦出发，途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦，计划横渡大西洋前往美国纽约市。但因为人为错误，于1912年4月14日船上时间夜里11点40分撞上冰山；2小时40分钟后，即4月15日凌晨02点20分，船裂成两半后沉入大西洋，死亡人数超越1500人，堪称20世纪最大的海难事件，同时也是最广为人知的海难之一。\n",
    "\n",
    "数据集包括两个数据表：`titianic_train.csv`和`titanic_test.csv`。\n",
    "\n",
    "`titianic_train.csv`记录了超过八百位泰坦尼克号乘客在沉船事件后的幸存情况，以及乘客的相关信息，包括所在船舱等级、性别、年龄、同乘伴侣/同胞数量、同乘父母/孩子数量，等等。\n",
    "\n",
    "`titanic_test.csv`只包含乘客（这些乘客不在`titianic_train.csv`里）相关信息，此文件可以被用于预测乘客是否幸存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`titianic_train.csv`每列的含义如下：\n",
    "- PassengerId：乘客ID\n",
    "- survival：是否幸存\n",
    "   - 0\t否\n",
    "   - 1\t是\n",
    "- pclass：船舱等级\n",
    "   - 1\t一等舱\n",
    "   - 2\t二等舱\n",
    "   - 3  三等舱\n",
    "- sex：性别\n",
    "- Age：年龄\n",
    "- sibsp：同乘伴侣/同胞数量\n",
    "- parch：同乘父母/孩子数量\n",
    "- ticket：船票号\n",
    "- fare：票价金额\n",
    "- cabin：船舱号\n",
    "- embarked：登船港口\n",
    "   - C  瑟堡\n",
    "   - Q  皇后镇\n",
    "   - S  南安普敦\n",
    "   \n",
    "   \n",
    "`titianic_test.csv`每列的含义和上面相同，但不具备survival变量的数据，即是否幸存。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-16T04:52:56.734965600Z",
     "start_time": "2024-04-16T04:52:56.714871600Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:36.952777200Z",
     "start_time": "2024-04-08T10:02:36.190359200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  "
      ]
     },
     "execution_count": 164,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#我们计划先利用titanic_train.csv训练预测模型，因此读取数据方面，当前只需要导入titanic_train.csv。通过Pandas的read_csv函数，将原始数据文件titanic_train.csv里的数据内容，解析为DataFrame并赋值给变量original_titanic_train。\n",
    "original_titanic_train = pd.read_csv(\"titanic_train.csv\")\n",
    "original_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 评估和清理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "在这一部分中，我们将对在上一部分建立的`original_titanic_trainDataFrame`所包含的数据进行评估和清理。\n",
    "主要从两个方面进行：结构和内容，即整齐度和干净度。\n",
    "\n",
    "数据的结构性问题指不符合“每个变量为一列，每个观察值为一行，每种类型的观察单位为一个表格”这三个标准；数据的内容性问题包括存在丢失数据、重复数据、无效数据等。\n",
    "\n",
    "为了区分开经过清理的数据和原始的数据，我们创建新的变量cleaned_titanic_train，让它为`original_titanic_train`复制出的副本。我们之后的清理步骤都将被运用在`cleaned_titanic_train`上。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:36.955778800Z",
     "start_time": "2024-04-08T10:02:36.207703900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "cleaned_titanic_train = original_titanic_train.copy()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 数据整齐度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.262433800Z",
     "start_time": "2024-04-08T10:02:36.218342600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>McCarthy, Mr. Timothy J</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>17463</td>\n",
       "      <td>51.8625</td>\n",
       "      <td>E46</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.1333</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>237736</td>\n",
       "      <td>30.0708</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "5            6         0       3   \n",
       "6            7         0       1   \n",
       "7            8         0       3   \n",
       "8            9         1       3   \n",
       "9           10         1       2   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "5                                   Moran, Mr. James    male   NaN      0   \n",
       "6                            McCarthy, Mr. Timothy J    male  54.0      0   \n",
       "7                     Palsson, Master. Gosta Leonard    male   2.0      3   \n",
       "8  Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)  female  27.0      0   \n",
       "9                Nasser, Mrs. Nicholas (Adele Achem)  female  14.0      1   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  \n",
       "5      0            330877   8.4583   NaN        Q  \n",
       "6      0             17463  51.8625   E46        S  \n",
       "7      1            349909  21.0750   NaN        S  \n",
       "8      2            347742  11.1333   NaN        S  \n",
       "9      0            237736  30.0708   NaN        C  "
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 数据干净度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "接下来通过info，对数据内容进行大致了解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.264425900Z",
     "start_time": "2024-04-08T10:02:36.241625700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  891 non-null    int64  \n",
      " 1   Survived     891 non-null    int64  \n",
      " 2   Pclass       891 non-null    int64  \n",
      " 3   Name         891 non-null    object \n",
      " 4   Sex          891 non-null    object \n",
      " 5   Age          714 non-null    float64\n",
      " 6   SibSp        891 non-null    int64  \n",
      " 7   Parch        891 non-null    int64  \n",
      " 8   Ticket       891 non-null    object \n",
      " 9   Fare         891 non-null    float64\n",
      " 10  Cabin        204 non-null    object \n",
      " 11  Embarked     889 non-null    object \n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.7+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从输出结果来看，`cleaned_titanic_train`共有891条观察值，其中`Age`、`Cabin`和`Embarked`存在缺失值，将在后续进行评估和清理。\n",
    "\n",
    "数据类型方面，`PassengerId`表示乘客ID，数据类型不应为数字，应为字符串，所以需要进行数据格式转换。\n",
    "\n",
    "并且，我们已知`Survived`（是否幸存）、`Pclass`（船舱等级）、`Sex`（性别）、`Embarked`（登船港口）都是分类数据，可以把数据类型都转换为Category。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.266425800Z",
     "start_time": "2024-04-08T10:02:36.253796Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype   \n",
      "---  ------       --------------  -----   \n",
      " 0   PassengerId  891 non-null    object  \n",
      " 1   Survived     891 non-null    category\n",
      " 2   Pclass       891 non-null    category\n",
      " 3   Name         891 non-null    object  \n",
      " 4   Sex          891 non-null    category\n",
      " 5   Age          714 non-null    float64 \n",
      " 6   SibSp        891 non-null    int64   \n",
      " 7   Parch        891 non-null    int64   \n",
      " 8   Ticket       891 non-null    object  \n",
      " 9   Fare         891 non-null    float64 \n",
      " 10  Cabin        204 non-null    object  \n",
      " 11  Embarked     889 non-null    category\n",
      "dtypes: category(4), float64(2), int64(2), object(4)\n",
      "memory usage: 59.8+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train['PassengerId'] = cleaned_titanic_train['PassengerId'].astype('str')\n",
    "cleaned_titanic_train['Survived'] = cleaned_titanic_train['Survived'].astype('category')\n",
    "cleaned_titanic_train['Pclass'] = cleaned_titanic_train['Pclass'].astype('category')\n",
    "cleaned_titanic_train['Sex'] = cleaned_titanic_train['Sex'].astype('category')\n",
    "cleaned_titanic_train['Embarked'] = cleaned_titanic_train['Embarked'].astype('category')\n",
    "\n",
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 处理缺失数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从info方法的输出结果来看，在`cleaned_titanic_train`中，`Age`、`Cabin`和`Embarked`变量存在缺失值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.280947100Z",
     "start_time": "2024-04-08T10:02:36.272344200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>18</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Williams, Mr. Charles Eugene</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>244373</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Masselmani, Mrs. Fatima</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2649</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>27</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Emir, Mr. Farred Chehab</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2631</td>\n",
       "      <td>7.2250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>29</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>O'Dwyer, Miss. Ellen \"Nellie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330959</td>\n",
       "      <td>7.8792</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>859</th>\n",
       "      <td>860</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Razi, Mr. Raihed</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2629</td>\n",
       "      <td>7.2292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>863</th>\n",
       "      <td>864</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sage, Miss. Dorothy Edith \"Dolly\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>CA. 2343</td>\n",
       "      <td>69.5500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>868</th>\n",
       "      <td>869</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>van Melkebeke, Mr. Philemon</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>345777</td>\n",
       "      <td>9.5000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>878</th>\n",
       "      <td>879</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Laleff, Mr. Kristo</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>349217</td>\n",
       "      <td>7.8958</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>177 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "17           18        1      2              Williams, Mr. Charles Eugene   \n",
       "19           20        1      3                   Masselmani, Mrs. Fatima   \n",
       "26           27        0      3                   Emir, Mr. Farred Chehab   \n",
       "28           29        1      3             O'Dwyer, Miss. Ellen \"Nellie\"   \n",
       "..          ...      ...    ...                                       ...   \n",
       "859         860        0      3                          Razi, Mr. Raihed   \n",
       "863         864        0      3         Sage, Miss. Dorothy Edith \"Dolly\"   \n",
       "868         869        0      3               van Melkebeke, Mr. Philemon   \n",
       "878         879        0      3                        Laleff, Mr. Kristo   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "\n",
       "        Sex  Age  SibSp  Parch      Ticket     Fare Cabin Embarked  \n",
       "5      male  NaN      0      0      330877   8.4583   NaN        Q  \n",
       "17     male  NaN      0      0      244373  13.0000   NaN        S  \n",
       "19   female  NaN      0      0        2649   7.2250   NaN        C  \n",
       "26     male  NaN      0      0        2631   7.2250   NaN        C  \n",
       "28   female  NaN      0      0      330959   7.8792   NaN        Q  \n",
       "..      ...  ...    ...    ...         ...      ...   ...      ...  \n",
       "859    male  NaN      0      0        2629   7.2292   NaN        C  \n",
       "863  female  NaN      8      2    CA. 2343  69.5500   NaN        S  \n",
       "868    male  NaN      0      0      345777   9.5000   NaN        S  \n",
       "878    male  NaN      0      0      349217   7.8958   NaN        S  \n",
       "888  female  NaN      1      2  W./C. 6607  23.4500   NaN        S  \n",
       "\n",
       "[177 rows x 12 columns]"
      ]
     },
     "execution_count": 169,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Age'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "有177条观察值的年龄变量缺失，占总体数据比例20%左右。由于这些观察值数量较多，且的其它变量仍然能为分析提供价值，我们最好保留这些行。\n",
    "\n",
    "但由于我们后面需要用到的逻辑回归函数Logit不允许数据中包含缺失值，所以用乘客年龄平均值对缺失值进行填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.284952200Z",
     "start_time": "2024-04-08T10:02:36.284567700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "average_age = cleaned_titanic_train['Age'].mean()\n",
    "cleaned_titanic_train['Age'] = cleaned_titanic_train['Age'].fillna(average_age)\n",
    "cleaned_titanic_train['Age'].isna().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.296947500Z",
     "start_time": "2024-04-08T10:02:36.289008100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson, Master. Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>884</th>\n",
       "      <td>885</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Sutehall, Mr. Henry Jr</td>\n",
       "      <td>male</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>SOTON/OQ 392076</td>\n",
       "      <td>7.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>886</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Rice, Mrs. William (Margaret Norton)</td>\n",
       "      <td>female</td>\n",
       "      <td>39.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>382652</td>\n",
       "      <td>29.1250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila, Rev. Juozas</td>\n",
       "      <td>male</td>\n",
       "      <td>27.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>888</th>\n",
       "      <td>889</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
       "      <td>female</td>\n",
       "      <td>29.699118</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>W./C. 6607</td>\n",
       "      <td>23.4500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley, Mr. Patrick</td>\n",
       "      <td>male</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>687 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                      Name  \\\n",
       "0             1        0      3                   Braund, Mr. Owen Harris   \n",
       "2             3        1      3                    Heikkinen, Miss. Laina   \n",
       "4             5        0      3                  Allen, Mr. William Henry   \n",
       "5             6        0      3                          Moran, Mr. James   \n",
       "7             8        0      3            Palsson, Master. Gosta Leonard   \n",
       "..          ...      ...    ...                                       ...   \n",
       "884         885        0      3                    Sutehall, Mr. Henry Jr   \n",
       "885         886        0      3      Rice, Mrs. William (Margaret Norton)   \n",
       "886         887        0      2                     Montvila, Rev. Juozas   \n",
       "888         889        0      3  Johnston, Miss. Catherine Helen \"Carrie\"   \n",
       "890         891        0      3                       Dooley, Mr. Patrick   \n",
       "\n",
       "        Sex        Age  SibSp  Parch            Ticket     Fare Cabin Embarked  \n",
       "0      male  22.000000      1      0         A/5 21171   7.2500   NaN        S  \n",
       "2    female  26.000000      0      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "4      male  35.000000      0      0            373450   8.0500   NaN        S  \n",
       "5      male  29.699118      0      0            330877   8.4583   NaN        Q  \n",
       "7      male   2.000000      3      1            349909  21.0750   NaN        S  \n",
       "..      ...        ...    ...    ...               ...      ...   ...      ...  \n",
       "884    male  25.000000      0      0   SOTON/OQ 392076   7.0500   NaN        S  \n",
       "885  female  39.000000      0      5            382652  29.1250   NaN        Q  \n",
       "886    male  27.000000      0      0            211536  13.0000   NaN        S  \n",
       "888  female  29.699118      1      2        W./C. 6607  23.4500   NaN        S  \n",
       "890    male  32.000000      0      0            370376   7.7500   NaN        Q  \n",
       "\n",
       "[687 rows x 12 columns]"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Cabin'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "有687条观察值的船舱号变量缺失，说明船舱号数据在大部分观察值中都是未知的，所以不能删除这些观察值。\n",
    "\n",
    "此外，我们认为船舱号并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.297947900Z",
     "start_time": "2024-04-08T10:02:36.297019700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>62</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Icard, Miss. Amelie</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>829</th>\n",
       "      <td>830</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Stone, Mrs. George Nelson (Martha Evelyn)</td>\n",
       "      <td>female</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>113572</td>\n",
       "      <td>80.0</td>\n",
       "      <td>B28</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    PassengerId Survived Pclass                                       Name  \\\n",
       "61           62        1      1                        Icard, Miss. Amelie   \n",
       "829         830        1      1  Stone, Mrs. George Nelson (Martha Evelyn)   \n",
       "\n",
       "        Sex   Age  SibSp  Parch  Ticket  Fare Cabin Embarked  \n",
       "61   female  38.0      0      0  113572  80.0   B28      NaN  \n",
       "829  female  62.0      0      0  113572  80.0   B28      NaN  "
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[cleaned_titanic_train['Embarked'].isna()]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "仅有两条观察值的登船港口变量缺失，但我们认为登船港口并不是影响生还概率的关键因素，不会被纳入逻辑回归的自变量内，即使缺失也不会影响建立模型，因此可以保留这些观察值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 处理重复数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "根据数据变量的含义以及内容来看，PassengerId是乘客的唯一标识符，不应该存在重复，因此查看是否存在重复值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.307950Z",
     "start_time": "2024-04-08T10:02:36.328388Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"PassengerId\"].duplicated().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "输出结果为0，说明不存在重复值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 处理不一致数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "不一致数据可能存在于所有分类变量中，我们要查看是否存在不同值实际指代同一目标的情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.319946Z",
     "start_time": "2024-04-08T10:02:36.356058600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Survived\n",
       "0    549\n",
       "1    342\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Survived\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.320945900Z",
     "start_time": "2024-04-08T10:02:36.360783200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pclass\n",
       "3    491\n",
       "1    216\n",
       "2    184\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Pclass\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.320945900Z",
     "start_time": "2024-04-08T10:02:36.365956100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Sex\n",
       "male      577\n",
       "female    314\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Sex\"].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.322947700Z",
     "start_time": "2024-04-08T10:02:36.370578400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Embarked\n",
       "S    644\n",
       "C    168\n",
       "Q     77\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 177,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train[\"Embarked\"].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从以上输出结果来看，均不存在不一致数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.323948500Z",
     "start_time": "2024-04-08T10:02:36.375084700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "## 处理无效或者错误数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "可以通过DataFrame的describe方法，对数值统计信息进行快速了解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.325962700Z",
     "start_time": "2024-04-08T10:02:36.384115700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "      <td>891.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.523008</td>\n",
       "      <td>0.381594</td>\n",
       "      <td>32.204208</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>13.002015</td>\n",
       "      <td>1.102743</td>\n",
       "      <td>0.806057</td>\n",
       "      <td>49.693429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.420000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>22.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.910400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>29.699118</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14.454200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>35.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>31.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>80.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>512.329200</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Age       SibSp       Parch        Fare\n",
       "count  891.000000  891.000000  891.000000  891.000000\n",
       "mean    29.699118    0.523008    0.381594   32.204208\n",
       "std     13.002015    1.102743    0.806057   49.693429\n",
       "min      0.420000    0.000000    0.000000    0.000000\n",
       "25%     22.000000    0.000000    0.000000    7.910400\n",
       "50%     29.699118    0.000000    0.000000   14.454200\n",
       "75%     35.000000    1.000000    0.000000   31.000000\n",
       "max     80.000000    8.000000    6.000000  512.329200"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "|乘客年龄平均为30岁左右，最大值为80岁，最小值为0.42岁。同乘伴侣/同胞数量最大值为8个，最小为0个。同乘父母/孩子数量最大值为6个，最小值为0个。船票价格平均为32元，最大值为512元，最小值为0元，猜测0元表示增票。数据不存在脱离现实的数值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 整理数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "对数据的整理，与分析方向紧密相关。此次数据分析目标是，根据泰坦尼克号乘客的相关信息，预测沉船事件发生后的生还概率。\n",
    "\n",
    "数据变量包含乘客同乘伴侣/同胞数量，以及同乘父母/孩子数量，这些可以帮助计算出船上家庭成员的数量。我们对同乘家庭成员数量是否会显著影响幸存感兴趣，因此可以创建一个新的变量，记录这一数值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.326963700Z",
     "start_time": "2024-04-08T10:02:36.414530400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  PassengerId Survived Pclass  \\\n",
       "0           1        0      3   \n",
       "1           2        1      1   \n",
       "2           3        1      3   \n",
       "3           4        1      1   \n",
       "4           5        0      3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  FamilyNum  \n",
       "0      0         A/5 21171   7.2500   NaN        S          1  \n",
       "1      0          PC 17599  71.2833   C85        C          1  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S          0  \n",
       "3      0            113803  53.1000  C123        S          1  \n",
       "4      0            373450   8.0500   NaN        S          0  "
      ]
     },
     "execution_count": 180,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cleaned_titanic_train['FamilyNum'] = cleaned_titanic_train['SibSp'] + cleaned_titanic_train['Parch']\n",
    "cleaned_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 探索数据\n",
    "\n",
    "在着手逻辑回归分析之前，我们可以先借助数据可视化，探索数值变量的分布，以及与乘客是否幸存存在相关性的变量，为后续的进一步分析提供方向。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.328961Z",
     "start_time": "2024-04-08T10:02:36.428606200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "# 设置图表色盘为\"pastel\"\n",
    "sns.set_palette(\"bright\")\n",
    "# 设置图表尺寸\n",
    "plt.rcParams[\"figure.figsize\"] = [7.00, 3.50]\n",
    "plt.rcParams[\"figure.autolayout\"] = True"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 幸存者比例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.337944900Z",
     "start_time": "2024-04-08T10:02:36.438529300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "survived_count = cleaned_titanic_train['Survived'].value_counts()\n",
    "survived_label = survived_count.index\n",
    "plt.pie(survived_count, labels=survived_label, autopct='%.1f%%')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从以上饼图来看，泰坦尼克号遇难乘客多于幸存乘客，比例约为3:2。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 乘客年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.371765600Z",
     "start_time": "2024-04-08T10:02:36.494719800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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vlSaIAAercwR7tTKPq1tN8drmPsYggC4OgOuLoY/K2voq6Vf43rfW3vvpa7TUq9hqffeSbj2/16Ldepafg2ZixPqG1teJU/mIkLQ3XwsrujkDm0LN5RBBKprjPs9ATjuUq2O2m8isgxTfqcIomibUxLv378f69evxxdffKFvKy8vx/Dhw3H06FHcfvvtElZHRERERJZms0MLzLW0IhERERHZJpsNsjcurXhdW5ZWJCIiIiLbZLNB9salFa/j0opEREREjsNmE9+NSysWFhbi008/xdatW/HMM89IXRoRERERtQObvdkLANRqNZYsWYJ//OMf8PT0xHPPPYepU6dKXRYRERERtQObDrJERERE5LhsdmgBERERETk2BlkiIiIiskkMskRERERkkxhkW6HRaDB//nxERkZiyJAh2Lp1q9QlWUxlZSXmzJmDqKgoDB06FGlpadBoNACurZo2depUhIWFITY2FseOHZO4WsuKj4/Ha6+9pn9eXFyMiRMnQqFQYPz48SgqKpKwOsvQarVYunQp7r33Xtx3331Ys2YNrg+hd4T+X7x4ETNnzsSAAQMQExODbdu26bc5Qv+JiGwRg2wrVq1ahaKiIrz33ntYvHgxNmzYgMOHD0tdltmJoog5c+ZArVZj586dWLt2Lb744gusW7cOoigiISEBvr6+yMrKwtixY5GYmIiKigqpy7aIQ4cO4ejRo/rntbW1iI+PR2RkJLKzsxEeHo6ZM2eitrZWwirNLyUlBV9//TW2bNmC1atX48MPP8QHH3zgMP3/61//Cg8PD2RnZ2P+/PlYt24djhw54jD9JyKySSLd1NWrV8V+/fqJJ06c0LdlZGSITz/9tIRVWUZpaanYo0cPUalU6tsOHjwoDhkyRPz666/FsLAw8erVq/ptf/7zn8U33nhDilIt6rfffhMfeOABcfz48eKrr74qiqIo7tmzR4yJiRF1Op0oiqKo0+nEESNGiFlZWVKWala//fab2KdPH/Gbb77Rt23evFl87bXXHKL/1dXVYo8ePcSzZ8/q2xITE8WlS5c6RP+JiGwVr8i24MyZM2hoaEB4eLi+LSIiAgUFBdDpdBJWZn5+fn5455134Ovra9BeU1ODgoIC9OnTBx4eHvr2iIgIg1XV7MXKlSsxduxYhIaG6tsKCgoQEREBQRAAAIIgYMCAAXbV/9zcXHh6eiIq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",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "sns.histplot(cleaned_titanic_train, x='Age', ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y='Age', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "大多数乘客年龄位于20岁到40岁之间，但有不少老年乘客以及婴儿。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 乘客的年龄与是否幸存"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.400282400Z",
     "start_time": "2024-04-08T10:02:36.662192300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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sgAAALAkClkAAABYEoVsHXA6nZoyZYp69OihPn366JVXXgl1SCHncrk0dOhQbd261dOWlZWl0aNHq2vXrhoyZIg+++yzEEYYXN9//70mTpyonj17qm/fvpozZ46cTqek+p0XSTp06JBuu+02devWTf369dNLL73kOVbfc1NhzJgx+tOf/uT5eu/evbrxxhuVkpKi4cOHa8+ePSGMLvjef/99XXzxxZU+Jk6cKIncuFwuzZgxQ7/85S91xRVX6Mknn/TszFRfc7NmzZoq58vFF1+sSy65RFL9zUuFI0eOaOzYserevbvS0tL06quveo6FY24oZOvA3LlztWfPHr322mt6+OGHtWDBAr3zzjuhDitknE6n7r33XmVkZHjaTNPUuHHj1KRJE61evVrXX3+9xo8fr8OHD4cw0uAwTVMTJ05UUVGR3nzzTT311FP66KOP9PTTT9frvEiS2+3WmDFjlJiYqLVr12rGjBl67rnntH79+nqfmwobNmzQpk2bPF8XFhZqzJgx6tGjh9asWaNu3bpp7NixKiz0b0tKK8nMzFT//v312WefeT5mzZpFbiTNmjVLmzdv1ssvv6wnnnhCK1as0PLly+t1bir+CK74+Pjjj9WmTRvdcsst9TovFf74xz8qNjZWa9as0ZQpU/T000/r/fffD9/cmAiogoICs0uXLuYXX3zhaVu4cKH5P//zPyGMKnQyMjLMX//61+Z1111ntm/f3pOXzZs3m127djULCgo8j/3f//1f869//WuoQg2azMxMs3379mZ2dranbf369WafPn3qdV5M0zS///578//9v/9nnjp1ytM2btw48+GHH673uTFN08zNzTWvvPJKc/jw4eaDDz5omqZprly50kxLSzPdbrdpmqbpdrvNa665xly9enUoQw2q++67z3ziiSeqtNf33OTm5podO3Y0t27d6ml74YUXzD/96U/1Pjdnev75580BAwaYTqez3uclLy/PbN++vblv3z5P2/jx480ZM2aEbW64Ihtg33zzjUpLS9WtWzdPW2pqqtLT0+V2u0MYWWhs27ZNvXr10vLlyyu1p6enq2PHjoqNjfW0paamVtqp7VzVtGlTvfTSS2rSpEml9vz8/HqdF0lKTk7W008/rfj4eJmmqR07dujLL79Uz549631uJOnxxx/X9ddfr3bt2nna0tPTlZqaKsMwJEmGYah79+71Ki/79+/X+eefX6W9vudmx44dio+PV8+ePT1tY8aM0Zw5c+p9birk5eXpxRdf1H333Se73V7v8xIdHa2YmBitWbNGJSUlOnDggHbu3KkOHTqEbW4oZAMsOztbiYmJstvtnrYmTZrI6XQqLy8vdIGFyKhRozRlyhTFxMRUas/OzlZycnKltqSkJB09ejSY4YVEQkKC+vbt6/na7XZryZIluuyyy+p1Xn4qLS1No0aNUrdu3TRw4MB6n5stW7Zo+/btuvvuuyu11/e8mKapgwcP6rPPPtPAgQM1YMAAzZ8/Xy6Xq97nJisrSy1bttS6des0aNAgXX311Vq4cKHcbne9z02FpUuXKjk5WYMGDZLEz5PD4dD06dO1fPlypaSkaPDgwbryyit14403hm1uIkM6+jmoqKioUhEryfO1y+UKRUhhyVee6mOO5s2bp71792rVqlV69dVXycuP/vrXvyonJ0ePPPKI5syZU6/PGafTqYcffljTp09XdHR0pWP1OS+SdPjwYU8Onn76aX377beaNWuWiouL631uCgsLdejQIS1btkxz5sxRdna2pk+frpiYmHqfG6n8j6CVK1fq9ttv97SRl/J3OPr3768//OEPysjI0MyZM3X55ZeHbW4oZAPM4XBU+aZWfP3T/4DqM4fDUeUKtcvlqnc5mjdvnl577TU99dRTat++PXk5Q5cuXSSVF3H333+/hg8frqKiokqPqS+5WbBggTp37lzpSn4FX79z6kNeJKlly5baunWrGjZsKMMw1KFDB7ndbj3wwAPq2bNnvc5NZGSk8vPz9cQTT6hly5aSygv/pUuXqk2bNvU6N5L0f//3f/r+++/1q1/9ytNW33+etmzZolWrVmnTpk2Kjo5Wly5d9P333+u5555T69atwzI3TC0IsGbNmik3N1elpaWetuzsbEVHRyshISGEkYWXZs2aKScnp1JbTk5OlbctzmUzZ87U4sWLNW/ePA0cOFASecnJydEHH3xQqa1du3YqKSlR06ZN621uNmzYoA8++EDdunVTt27dtH79eq1fv17dunWr9+eMJDVq1Mgzb0+S2rZtK6fTWa/PGal8Pr7D4fAUsZJ0wQUX6MiRI5w3kj799FP16NFDDRs29LTV97zs2bNHbdq0qVScduzYUYcPHw7b3FDIBliHDh0UGRlZafLzjh071KVLF9ls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",
      "text/plain": [
       "<Figure size 700x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.histplot(cleaned_titanic_train, x='Age', hue='Survived', alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从乘客年龄直方图来看，只有婴儿群体幸存比例较高，绝大部分其余年龄段都是遇难人数多于幸存人数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 船票金额分部"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.684928900Z",
     "start_time": "2024-04-08T10:02:36.829221600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAKyCAYAAAA6kpdwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABfk0lEQVR4nO3dfZiVZb03/O+CcQYUEQXkEfXWxJcQZSDYUHcZ6a1bRdwq0Ivu8nZroluQ5+7NRHbl68a00lIUydxWuLWEbaVZu9dNaaWGAg+SNYAZihpoZObAOMx6/jDn3iOzkIFh1qzF53Mc64h1ntda1+/ih9PMd851XoVisVgMAAAAAACwmR7lLgAAAAAAALorIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJRQU+4Cyu2FF/6SYrHrzlcoJP37797l56Vr6G9109/qpr/VS2+rWyX29/WaaauSeggAQHXY2u/Nd/oQvVhMWb5ZL9d56Rr6W930t7rpb/XS2+qmv5VPDwEA6K5s5wIAAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAABVqzpwv5Zxz/jFz5nyp3KUAVC0hOgAAAEAFeuGFdXnkkYeSJI888lBeeGFdmSsCqE5CdAAAAIAKdPXVl73h+eVlqgSgugnRAQAAACrMgw/+LC+++GKbsRdffCEPPvizMlUEUL2E6AAAAAAVZNOmTbn99lvbnbv99luzadOmLq4IoLoJ0QEAAAAqyMKFP0lLS/tBeUvLpixc+JMurgigugnRu5Gamh7tPgAAAABeN27cMenRo2e7cz179sy4ccd0cUUA1a2m3AXwmpqaHvny/b2yak2xzfhBgws5d/yGNDe3lKkyAAAAoDvp2bNnzjrrw7nttls2m/unf5qSnj3bD9gB2DZC9G5k1ZpiHn/yjaPF9g4FAAAAdmLvfOe7861v3d3m5qJ77dU/73jHu8pYFUB1slcIAAAAQAW6+OLPvOH5p8tUCUB1E6IDAAAAVKD+/Qfk7/5ubJLk7/5ubPr3H1DmigCqk+1cAAAAACrU+edPz/nnl7sKgOpmJToAAAAAAJQgRAcAAAAAgBKE6AAAQH74wx/msMMOa/OYPn16kmT58uV573vfm/r6+kyaNCnLli1r89r77rsvxx57bOrr6zN16tS8+OKL5bgEAADYIYToAABAVqxYkaOPPjoPPPBA6+PKK6/MK6+8kilTpmT06NH5j//4j4wcOTLnnXdeXnnllSTJ0qVLM3PmzEybNi3f+MY38tJLL2XGjBllvhoAAOg8QnQAACArV67MoYcemoEDB7Y++vbtm/vvvz91dXW56KKLMmTIkMycOTO77bZbvv/97ydJ5s2blxNPPDGnnnpq3vrWt+aaa67JwoULs3r16jJfEQAAdA4hOgAAkJUrV+bAAw/cbHzJkiUZNWpUCoVCkqRQKORtb3tbFi9e3Do/evTo1uP32WefDB48OEuWLOmKsgEAYIerKXcBAABAeRWLxTz55JN54IEHcsstt2TTpk054YQTMn369KxduzYHH3xwm+P79++fhoaGJMkf//jH7L333pvNP/fccx2q4W8ZPQAAdJmt/R5UiA4AADu5NWvWpLGxMbW1tbn++uvz9NNP58orr8yGDRtax/+72traNDU1JUk2bNiwxfmt1b//7tt3EQAAsIMI0QEAYCe377775qGHHsoee+yRQqGQoUOHpqWlJZ/4xCcyZsyYzQLxpqam9OrVK0lSV1fX7nzv3r07VMMLL/wlxeL2XQcAAHREobB1izmE6AAAQPr169fm+ZAhQ7Jx48YMHDgw69atazO3bt261i1cBg0a1O78wIEDO3T+YjFCdAAAuiU3FgUAgJ3cz3/+84wdOzaNjY2tY7/5zW/Sr1+/jBo1Ko899liKf0u4i8ViHn300dTX1ydJ6uvrs2jRotbXPfvss3n22Wdb5wEAoNIJ0QEAYCc3cuTI1NXV5V/+5V+yatWqLFy4MNdcc00+/OEP54QTTshLL72Uq666KitWrMhVV12VxsbGnHjiiUmS008/Pd/+9rdz991354knnshFF12U97znPdl///3LfFUAANA5hOgAALCT69OnT77yla/kxRdfzKRJkzJz5sy8//3vz4c//OH06dMnt9xySxYtWpSJEydmyZIlmTt3bnbdddckrwXwl19+eWbPnp3TTz89e+yxR2bNmlXmKwIAgM5jT3QAACCHHHJI/u3f/q3dueHDh+eee+4p+dqJEydm4sSJO6o0AAAoq7KuRH/qqadyzjnnZOTIkXnPe96TW2+9tXVu9erVOeusszJixIiMHz8+DzzwQJvX/uIXv8iECRNSX1+fM888M6tXr+7q8gEAAAAAqHJlC9FbWloyZcqU7Lnnnrnnnnty2WWX5eabb869996bYrGYqVOnZsCAAVmwYEFOOeWUTJs2LWvWrEmSrFmzJlOnTs3EiRMzf/787LXXXrngggtab3YEAAAAAACdoWzbuaxbty5Dhw7NpZdemj59+uTAAw/MO97xjixatCgDBgzI6tWrc9ddd2XXXXfNkCFD8stf/jILFizIhRdemLvvvjtHHHFEzj777CTJrFmz8s53vjMPP/xwxo4dW65LAgAAAACgypRtJfree++d66+/Pn369EmxWMyiRYvyyCOPZMyYMVmyZEkOP/zw1psVJcmoUaOyePHiJMmSJUsyevTo1rnevXtn2LBhrfMAAAAAANAZyron+uuOOeaYnHHGGRk5cmSOP/74rF27NnvvvXebY/r375/nnnsuSd50HgAAAAAAOkPZtnP57770pS9l3bp1ufTSSzNr1qw0Njamtra2zTG1tbVpampKkjed74hCYdvr3havn++N591SHYVC19fJtinVX6qD/lY3/a1eelvdKrG/lVQrAADQTUL0I488MkmycePGfPzjH8+kSZPS2NjY5pimpqb06tUrSVJXV7dZYN7U1JS+fft2+Nz9++++jVVvn/bOu0tNUrvL5mP9+nWLNtEB5fp3RdfQ3+qmv9VLb6ub/gIAADtKWW8sunjx4hx77LGtYwcffHBeffXVDBw4MKtWrdrs+Ne3cBk0aFDWrVu32fzQoUM7XMcLL/wlxeI2XMA2KhRe+yHvjeetqemRV5vr0vRq2+NfbU7Wr9+Y5uaWriuSbVaqv1QH/a1u+lu99La6VWJ/X68ZAACoDGUL0Z9++ulMmzYtCxcuzKBBg5Iky5Yty1577ZVRo0bltttuy4YNG1pXny9atCijRo1KktTX12fRokWt79XY2Jjly5dn2rRpHa6jWExZfuB643m3VEO5amTb6Vl109/qpr/VS2+rm/4CAAA7StluLHrkkUdm2LBhueSSS7JixYosXLgw1157bc4///yMGTMm++yzT2bMmJGGhobMnTs3S5cuzeTJk5MkkyZNyqOPPpq5c+emoaEhM2bMyH777ZexY8eW63IAAAAAAKhCZQvRe/bsmZtuuim9e/fO+9///sycOTMf+tCHcuaZZ7bOrV27NhMnTsx3vvOdzJ49O4MHD06S7LfffrnhhhuyYMGCTJ48OevXr8/s2bNTcJcmAAAAAAA6UVnvWDlo0KDceOON7c4dcMABmTdvXsnXjhs3LuPGjdtRpQEAAAAAQPlWogMAAAAAQHcnRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUEJZQ/Tnn38+06dPz5gxY3LUUUdl1qxZ2bhxY5LkyiuvzGGHHdbmMW/evNbX3nfffTn22GNTX1+fqVOn5sUXXyzXZQAAAAAAUKVqynXiYrGY6dOnp2/fvrnjjjvy5z//OZdcckl69OiRT37yk1m5cmU+9rGP5bTTTmt9TZ8+fZIkS5cuzcyZM3PZZZflrW99a6666qrMmDEjt9xyS7kuBwAAAACAKlS2leirVq3K4sWLM2vWrBxyyCEZPXp0pk+fnvvuuy9JsnLlyhx++OEZOHBg66N3795Jknnz5uXEE0/Mqaeemre+9a255pprsnDhwqxevbpclwMAAAAAQBUqW4g+cODA3HrrrRkwYECb8Zdffjkvv/xynn/++Rx44IHtvnbJkiUZPXp06/N99tkngwcPzpIlS3ZkyQAAAAAA7GTKFqL37ds3Rx11VOvzlpaWzJs3L29/+9uzcuXKFAqFzJkzJ+9+97vzD//wD7nnnntaj/3jH/+Yvffeu8379e/fP88991yX1Q8AANVoypQpufjii1ufL1++PO9973tTX1+fSZMmZdmyZW2Od68iAACqXdn2RH+ja6+9NsuXL8/8+fPz+OOPp1Ao5KCDDsoHP/jBPPLII/nUpz6VPn365LjjjsuGDRtSW1vb5vW1tbVpamrq8HkLhc66go6d743n3VIdhULX18m2KdVfqoP+Vjf9rV56W90qsb/dudbvfve7WbhwYet9iV555ZVMmTIlJ598cq6++urceeedOe+88/LDH/4wu+66q3sVAQCwU+gWIfq1116br371q7nuuuty6KGH5pBDDsnRRx+dfv36JUne+ta35ve//33uvPPOHHfccamrq9ssMG9qamrdM70j+vffvTMuoVPOu0tNUrvL5mP9+nWLNtEB5fp3RdfQ3+qmv9VLb6ub/m6/9evX55prrsmRRx7ZOnb//fenrq4uF110UQqFQmbOnJmf/exn+f73v5+JEye2uVdRklxzzTU5+uijs3r16uy///5luhIAAOhcZU9nr7jiitx555259tprc/zxxydJCoVCa4D+uoMOOii/+tWvkiSDBg3KunXr2syvW7cuAwcO7PD5X3jhLykWt632bVEovPZD3hvPW1PTI68216Xp1bbHv9qcrF+/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K9H79u2bo446qvV5S0tL5s2bl7e//e1Zu3Zt9t577zbH9+/fP88991ySvOl8RxQK21D8dnj9fG8875bqKBS6vk62Tan+Uh30t7rpb/XS2+pWif2tpFoBAIAyhuhvdO2112b58uWZP39+br/99tTW1raZr62tTVNTU5KksbFxi/Md0b//7tte9HZo77y71CS1u2w+1q9ft2kTW6lc/67oGvpb3fS3eultddNfAABgR+kW6ey1116br371q7nuuuty6KGHpq6uLuvXr29zTFNTU3r16pUkqaur2ywwb2pqSt++fTt87hde+Eu68n6khcJrP+S98bw1NT3yanNdml5te/yrzcn69RvT3NzSdUWyzUr1l+qgv9VNf6uX3la3Suzv6zUDAACVoewh+hVXXJE777wz1157bY4//vgkyaBBg7JixYo2x61bt651C5dBgwZl3bp1m80PHTq0w+cvFlOWH7jeeN4t1VCuGtl2elbd9Le66W/10tvqpr8AAMCOUrYbiybJjTfemLvuuitf+MIXctJJJ7WO19fX5/HHH8+GDRtaxxYtWpT6+vrW+UWLFrXONTY2Zvny5a3zAAAAAADQGcoWoq9cuTI33XRTzj333IwaNSpr165tfYwZMyb77LNPZsyYkYaGhsydOzdLly7N5MmTkySTJk3Ko48+mrlz56ahoSEzZszIfvvtl7Fjx5brcgAAAAAAqEJlC9F//OMfZ9OmTbn55pvzrne9q82jZ8+euemmm7J27dpMnDgx3/nOdzJ79uwMHjw4SbLffvvlhhtuyIIFCzJ58uSsX78+s2fPTqFQKNflAAAAAABQhcq2J/qUKVMyZcqUkvMHHHBA5s2bV3J+3LhxGTdu3I4oDQAAAAAAkpR5T3QAAAAAAOjOhOgAAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AACQp556Kuecc05GjhyZ97znPbn11ltb51avXp2zzjorI0aMyPjx4/PAAw+0ee0vfvGLTJgwIfX19TnzzDOzevXqri4fAAB2GCE6AADs5FpaWjJlypTsueeeueeee3LZZZfl5ptvzr333ptisZipU6dmwIABWbBgQU455ZRMmzYta9asSZKsWbMmU6dOzcSJEzN//vzstddeueCCC1IsFst8VQAA0Dlqyl0AAABQXuvWrcvQoUNz6aWXpk+fPjnwwAPzjne8I4sWLcqAAQOyevXq3HXXXdl1110zZMiQ/PKXv8yCBQty4YUX5u67784RRxyRs88+O0kya9asvPOd78zDDz+csWPHlvnKAABg+1mJDgAAO7m99947119/ffr06ZNisZhFixblkUceyZgxY7JkyZIcfvjh2XXXXVuPHzVqVBYvXpwkWbJkSUaPHt0617t37wwbNqx1HgAAKp0QHQAAaHXMMcfkjDPOyMiRI3P88cdn7dq12Xvvvdsc079//zz33HNJ8qbzAABQ6WznAgAAtPrSl76UdevW5dJLL82sWbPS2NiY2traNsfU1tamqakpSd50fmsVCttXNwAAdNTWfg8qRAcAAFodeeSRSZKNGzfm4x//eCZNmpTGxsY2xzQ1NaVXr15Jkrq6us0C86ampvTt27dD5+3ff/ftqBoAAHYcIToAAOzk1q1bl8WLF+fYY49tHTv44IPz6quvZuDAgVm1atVmx7++hcugQYOybt26zeaHDh3aoRpeeOEvKRa38QIAAGAbFApbt5hDiA4AADu5p59+OtOmTcvChQszaNCgJMmyZcuy1157ZdSoUbntttuyYcOG1tXnixYtyqhRo5Ik9fX1WbRoUet7NTY2Zvny5Zk2bVqHaigWI0QHAKBbcmNRAADYyR155JEZNmxYLrnkkqxYsSILFy7Mtddem/PPPz9jxozJPvvskxkzZqShoSFz587N0qVLM3ny5CTJpEmT8uijj2bu3LlpaGjIjBkzst9++2Xs2LFlvioAAOgcQnQAANjJ9ezZMzfddFN69+6d97///Zk5c2Y+9KEP5cwzz2ydW7t2bSZOnJjvfOc7mT17dgYPHpwk2W+//XLDDTdkwYIFmTx5ctavX5/Zs2en4E6hAABUCdu5AAAAGTRoUG688cZ25w444IDMmzev5GvHjRuXcePG7ajSAACgrKxEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEjo9RH/xxRc7+y0BAAAAAKAstilEHzp0aLth+TPPPJP/9b/+13YXBQAAAAAA3UHN1h74rW99K//xH/+RJCkWi5k6dWp22WWXNsf88Y9/zMCBAzu3QgAAAAAAKJOtDtGPO+64PP3000mShx9+OCNGjMhuu+3W5phdd901xx13XOdWCAAAAAAAZbLVIfpuu+2WadOmJUn23XffjB8/PnV1dTusMAAAAAAAKLetDtH/u9NOOy1PPfVUli1blldffXWz+VNPPXV76wIAAADgTXz84xfmT396MXvuuVc+97kbyl0OQFXaphD91ltvzec+97nssccem23pUigUhOgAAAAAO9iKFb/Ln/70YpLkT396MStW/C4HH3xomasCqD7bFKLfdttt+cQnPpFzzjmns+sBAAA6aNGiRfnqV7+ap556KnPmzMm9996bfffdNyeddFK5SwNgB7r66ss3e37rrfPKVA1A9eqxLS/auHFj/v7v/76zawEAADroBz/4QaZMmZJ99903Tz75ZJqbm1NTU5OLL744//7v/17u8gDYQW6//cspFottxorFYm6//ctlqgigem1TiH7yySfn3//93zf7Yg0AAHStG2+8MZdeemk++clPpmfPnkmSs88+O//6r/+af/u3fytzdQDsCE1NTfn5z/+r3bmf//y/0tTU1HXFAOwEtmk7l5dffjnz58/Pfffdl/322y+77LJLm/mvfe1rnVIcAACwZU899VRGjBix2fjw4cPz/PPPd31BAOxwX/nKLW86/8//fGEXVQNQ/bYpRD/wwANz/vnnd3YtAABABx188MH5+c9/njPOOKPN+D333JODDz64TFUBsCOdc855+fWvf7XFeQA6zzaF6NOmTevsOgAAgG0wY8aMnH/++fnVr36VV199NXPmzMlTTz2VZcuW5eabby53eQDsALW1tTnqqPe0u6XLuHHHpLa2tqtLAqhq2xSiz5gxY4vzs2bN2qZiAACAjhk9enS+//3v54477kiSrF+/PiNGjMg111yTwYMHl7k6AHaUs846Nw88sLDN/eoKhULOPPOcMlYFUJ22KUR/o+bm5qxevTq/+c1v8sEPfrAz3hIAANgKF1xwQT72sY/l//1//99ylwJAF7v44k9n1qzL2jwHoPNt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+++/o8sGAAAAAGAnUdaV6A8//HDGjh2bb3zjG23GX3755Tz//PM58MAD233dkiVLMnr06Nbn++yzTwYPHpwlS5bsyHIBAAAAANjJlHUl+hlnnNHu+MqVK1MoFDJnzpz87Gc/S79+/fJP//RPOe2005Ikf/zjH7P33nu3eU3//v3z3HPP7fCaAQAAAADYeZQ1RC9l1apVKRQKOeigg/LBD34wjzzySD71qU+lT58+Oe6447Jhw4bU1ta2eU1tbW2ampo6fK5CobOq7tj53njeLdVRKHR9nWybUv2lOuhvddPf6qW31a0S+1tJtQLQ/V199WVpaPhdDjnk0Fx88WfKXQ5AVeqWIfqpp56ao48+Ov369UuSvPWtb83vf//73HnnnTnuuONSV1e3WWDe1NSU3r17d/hc/fvv3hkld8p5d6lJanfZfKxfv27ZJragXP+u6Br6W930t3rpbXXTXwB2Rs8+uyYNDb9LkjQ0/C7PPrsm++wzuMxVAVSfbpnOFgqF1gD9dQcddFB+9atfJUkGDRqUdevWtZlft25duzchfTMvvPCXtHNf0x2mUHjth7w3nrempkdeba5L06ttj3+1OVm/fmOam1u6rki2Wan+Uh30t7rpb/XS2+pWif19vWYA2F5XXvmpNzz/dGbPvrVM1QBUr24Zon/xi1/MY489lttvv7117IknnshBBx2UJKmvr8+iRYsyceLEJMmzzz6bZ599NvX19R0+V7GYsvzA9cbzbqmGctXIttOz6qa/1U1/q5feVjf9BWBn873v3ZsNGza0GduwoTHf+969OfHEk8tUFUB16lHuAtpz9NFH55FHHslXvvKV/OEPf8i///u/51vf+lbOPvvsJMnpp5+eb3/727n77rvzxBNP5KKLLsp73vOe7L///mWuHAAAAGDHam5uzvz5d7U7N3/+XWlubu7iigCqW7cM0YcPH54vfvGL+fa3v50JEybk61//ej7/+c9n5MiRSZKRI0fm8ssvz+zZs3P66adnjz32yKxZs8pcNQAAAMCOd++992zXPAAd0222c/ntb3/b5vmxxx6bY489tuTxEydObN3OBQAAAGBncfLJp+W++761xXkAOk+3XIkOAAAAQPtqamoyefIH2p173/vOSE1Nt1kzCVAVhOgAAAAAFebEE09Or1692oz16tUrxx9/UpkqAqheQnQAAACACvT2t79zi88B6BxCdAAAAIAK8/zzz+VnP/uvNmM///l/5fnnnytHOQBVTYgOAAAAUEGKxWLuuOP2JMV2x4vFYruvA2DbCNEBAAAAKsizz67J44//f2lpaWkz3tLSkscf///y7LNrylQZQHUSogMAAABUkH32GZxhw45Mjx5tY50ePXrkiCOGZ599BpepMoDqJEQHAAAAqCCFQiH/+I9nJSm0O14oFNp9HQDbRogOAAAAUGEGDfp/Mn78ya2BeaFQyPjx/5C99x5U5soAqo8QHQAAAKACjR//D9ljj35Jkn799syJJ55c3oIAqpQQHQAAAKAC1dXV5UMfOjv9+w/IBz/4T6mrqyt3SQBVSYgOAAAAUKG+//1788IL6/L9799b7lIAqpYQHQAAAKACPfvsmjQ0/C5J0tDwuzz77JoyVwRQnYToAAAAABXoyis/9Ybnny5TJQDVTYgOAAAAUGG+9717s2HDhjZjGzY05nvfs60LQGcTogMAAABUkObm5syff1e7c/Pn35Xm5uYurgigugnRAQAAACrIvffes13zAHSMEB0AAACggpx88mnbNQ9AxwjRAQAAACpITU1NJk/+QLtz73vfGampqeniigCqmxAdAAAAoMKceOLJ6dWrV5uxXr165/jjTypTRQDVS4gOAAAAUIH+5V+ueMPzy8tUCUB1E6IDAAAAVKB99hmcQw45NElyyCGHZp99Bpe5IoDqZJMsAAAAgAp18cWfKXcJAFXPSnQAANjJPf/885k+fXrGjBmTo446KrNmzcrGjRuTJKtXr85ZZ52VESNGZPz48XnggQfavPYXv/hFJkyYkPr6+px55plZvXp1OS4BAAB2GCE6AADsxIrFYqZPn57Gxsbccccdue666/LTn/40119/fYrFYqZOnZoBAwZkwYIFOeWUUzJt2rSsWbMmSbJmzZpMnTo1EydOzPz587PXXnvlggsuSLFYLPNVAQBA57GdCwAA7MRWrVqVxYsX58EHH8yAAQOSJNOnT89nP/vZvPvd787q1atz1113Zdddd82QIUPyy1/+MgsWLMiFF16Yu+++O0cccUTOPvvsJMmsWbPyzne+Mw8//HDGjh1bzssCAIBOYyU6AADsxAYOHJhbb721NUB/3csvv5wlS5bk8MMPz6677to6PmrUqCxevDhJsmTJkowePbp1rnfv3hk2bFjrPAAAVAMhOgAA7MT69u2bo446qvV5S0tL5s2bl7e//e1Zu3Zt9t577zbH9+/fP88991ySvOk8AABUA9u5AAAAra699tosX7488+fPz+23357a2to287W1tWlqakqSNDY2bnG+IwqFba8ZAAC2xdZ+DypEBwAAkrwWoH/1q1/Nddddl0MPPTR1dXVZv359m2OamprSq1evJEldXd1mgXlTU1P69u3b4XP377/7NtcNAAA7khAdAADIFVdckTvvvDPXXnttjj/++CTJoEGDsmLFijbHrVu3rnULl0GDBmXdunWbzQ8dOrTD53/hhb+kWNzG4gEAYBsUClu3mEOIDgAAO7kbb7wxd911V77whS/khBNOaB2vr6/P3Llzs2HDhtbV54sWLcqoUaNa5xctWtR6fGNjY5YvX55p06Z1uIZiMUJ0AAC6JTcWBQCAndjKlStz00035dxzz82oUaOydu3a1seYMWOyzz77ZMaMGWloaMjcuXOzdOnSTJ48OUkyadKkPProo5k7d24aGhoyY8aM7Lfffhk7dmyZrwoAADqPEB0AAHZiP/7xj7Np06bcfPPNede73tXm0bNnz9x0001Zu3ZtJk6cmO985zuZPXt2Bg8enCTZb7/9csMNN2TBggWZPHly1q9fn9mzZ6fgLqEAAFQR27kAAMBObMqUKZkyZUrJ+QMOOCDz5s0rOT9u3LiMGzduR5QGAADdgpXoAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAAAAACUI0QEAAAAAoAQhOgAAAAAAlCBEBwAAAACAEoToAAAAAABQghAdAAAAAABKEKIDAAAAAEAJQnQAAAAAAChBiA4AAABQoe655+6ce+6Hcs89d5e7FICqJUQHAAAAqEB/+ctL+e53v52WlpZ897vfzl/+8lK5SwKoSkJ0AAAAgAo0e/Z1KRaLSZJisZjZs68vb0EAVUqIDgAAAFBhli9floaG37UZa2j4bZYvX1amigCqlxAdAAAAoIK0tLRkzpwb2p2bM+eGtLS0dHFFANVNiA4AAABQQZYuXZy//vXlduf++teXs3Tp4q4tCKDKCdEBAAAAKsjw4SOy22592p3r06dPhg8f0bUFAVQ5IToAAABABenRo0fOP//CdufOP396evQQ9wB0Jl9Vu7manknPnj1SU9P2AQAAAOy8Dj/8iBxyyKFtxg455LAMHTqsTBUBVK+achfAlu0/KLnlvrqsfOb/3hTkoMGFnDt+Q5qb3SgEAAAAdlZTp34kH/nIBSkWiykUCpk69f+UuySAqmRJcwVYtaaYx59M62PVmmK5SwIAAADKbPfd++akk05Jjx49ctJJp2T33fuWuySAqmQlOgAAAECFOu209+a0095b7jIAqpqV6AAAAAAAUIIQHQAAAKBCzZnzpZxzzj9mzpwvlbsUgKolRAcAAACoQC+8sC6PPPJQkuSRRx7KCy+sK3NFANVJiA4AAABQga6++rI3PL+8TJUAVDchOgAAAECFefDBn+XFF19sM/biiy/kwQd/VqaKAKqXEB0AAACggmzatCm3335ru3O3335rNm3a1MUVAVQ3IToAAABABVm48CdpaWk/KG9p2ZSFC3/SxRUBVDchOgAAAEAFeec7371d8wB0jBAdAAAAoILcf/93tmsegI7pFiF6U1NTJkyYkIceeqh1bPXq1TnrrLMyYsSIjB8/Pg888ECb1/ziF7/IhAkTUl9fnzPPPDOrV6/u6rIBAAAAutzJJ5+2XfMAdEzZQ/SNGzfmox/9aBoaGlrHisVipk6dmgEDBmTBggU55ZRTMm3atKxZsyZJsmbNmkydOjUTJ07M/Pnzs9dee+WCCy5IsVgs12UAAAAAdImamppMnvyBdufe974zUlNT08UVAVS3soboK1asyPve97784Q9/aDP+q1/9KqtXr87ll1+eIUOG5LzzzsuIESOyYMGCJMndd9+dI444ImeffXYOOeSQzJo1K88880wefvjhclwGAAAAQJc64IC3tDu+//4HdHElANWvrCH6ww8/nLFjx+Yb3/hGm/ElS5bk8MMPz6677to6NmrUqCxevLh1fvTo0a1zvXv3zrBhw1rnAQAAAKpVS0tL5sy5od25OXNuSEtLSxdXBFDdyvr5njPOOKPd8bVr12bvvfduM9a/f/8899xzWzXfEYVCh1+yXV4/3xvPu6U62psqFLq+dt5cqf5SHfS3uulv9dLb6laJ/a2kWgHonpYuXZy//vXlduf++teXs3Tp4owY8bYurgqgenXLTbIaGxtTW1vbZqy2tjZNTU1bNd8R/fvvvu2Fbof2zrtLTVK7S9uxmp5Jz55tx3epSfr165at42/K9e+KrqG/1U1/q5feVjf9BWBnMnz4iOy2W592g/Q+ffpk+PARXV8UQBXrlklsXV1d1q9f32asqakpvXr1ap1/Y2De1NSUvn37dvhcL7zwl3Tl/UgLhdd+yHvjeWtqeuTV5ro0vdr2+OZNyaZNhTS9+n8PfrU5Wb9+Y5qbfTyruynVX6qD/lY3/a1eelvdKrG/r9cMANuqR48eOf/8C/P5z8/abO7886enR4+y7t4LUHW6ZYg+aNCgrFixos3YunXrWrdwGTRoUNatW7fZ/NChQzt8rmIxZfmB643n3VIN7U2Vq262jv5UN/2tbvpbvfS2uukvADubww8/IocccmgaGn7XOnbIIYdl6NBhZawKoDp1y19N1tfX5/HHH8+GDRtaxxYtWpT6+vrW+UWLFrXONTY2Zvny5a3zAAAAANVu6tSPpPC3m20UCoVMnfp/ylsQQJXqliH6mDFjss8++2TGjBlpaGjI3Llzs3Tp0kyePDlJMmnSpDz66KOZO3duGhoaMmPGjOy3334ZO3ZsmSsHAAAA6Bq77943J510Snr06JGTTjolu+/e8W1uAXhz3TJE79mzZ2666aasXbs2EydOzHe+853Mnj07gwcPTpLst99+ueGGG7JgwYJMnjw569evz+zZs1t/+woAAACwMzjttPfmy1/+ek477b3lLgWganWbPdF/+9vftnl+wAEHZN68eSWPHzduXMaNG7ejywIAAADotubM+VIeeeSh/N3fjc35508vdzkAValbrkQHAAAAYMteeGFdHnnkoSTJI488lBdeWFfmigCqkxAdAAAAoAJdffVlb3h+eZkqAahuQnQAAACACvPggz/Liy++2GbsxRdfyIMP/qxMFQFULyH6TqKmpke7DwAAAKCybNq0Kbfffmu7c7fffms2bdrUxRUBVLduc2NRdpyamh758v29smpNsc34QYMLOXf8hjQ3t5SpMgAAAKCjFi78SVpa2g/KW1o2ZeHCn+SYY47r4qoAqpcQfSexak0xjz/5xtFie4cCAAAA3dhRR70nd9xx+xbnAeg89vMAAAAAqCDLli3Z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p+bFF1/s6pJ5Ez/84Q9z2GGHtXlMnz49if4CAABdR4jeha655posW7YsX/3qV/OZz3wmN954Y77//e+Xuyw6YOPGjfnoRz+ahoaG1rFisZipU6dmwIABWbBgQU455ZRMmzYta9asSZKsWbMmU6dOzcSJEzN//vzstddeueCCC+Kevt1HsVjM9OnT09jYmDvuuCPXXXddfvrTn+b666/X3wrX0tKSKVOmZM8998w999yTyy67LDfffHPuvfdeva0y3/3ud7Nw4cLW56+88kqmTJmS0aNH5z/+4z8ycuTInHfeeXnllVeSJEuXLs3MmTMzbdq0fOMb38hLL72UGTNmlKt8SlixYkWOPvroPPDAA62PK6+8Un8BAIAuJUTvIq+88kruvvvuzJw5M8OGDctxxx2XD3/4w7njjjvKXRpbacWKFXnf+96XP/zhD23Gf/WrX2X16tW5/PLLM2TIkJx33nkZMWJEFixYkCS5++67c8QRR+Tss8/OIYccklmzZuWZZ57Jww8/XI7LoB2rVq3K4sWLM2vWrBxyyCEZPXp0pk+fnvvuu09/K9y6desydOjQXHrppTnwwAMzbty4vOMd78iiRYv0toqsX78+11xzTY488sjWsfvvvz91dXW56KKLMmTIkMycOTO77bZb6y+v582blxNPPDGnnnpq3vrWt+aaa67JwoULfdqgm1m5cmUOPfTQDBw4sPXRt29f/QUAALqUEL2LPPHEE2lubs7IkSNbx0aNGpUlS5akpaWljJWxtR5++OGMHTs23/jGN9qML1myJIcffnh23XXX1rFRo0Zl8eLFrfOjR49unevdu3eGDRvWOk/5DRw4MLfeemsGDBjQZvzll1/W3wq399575/rrr0+fPn1SLBazaNGiPPLIIxkzZozeVpHPfvazOeWUU3LwwQe3ji1ZsiSjRo1KoVBIkhQKhbztbW8r2d999tkngwcPzpIlS7q0drZs5cqVOfDAAzcb118AAKArCdG7yNq1a7Pnnnumtra2dWzAgAHZuHFj1q9fX77C2GpnnHFGLrnkkvTu3bvN+Nq1a7P33nu3Gevfv3+ee+65rZqn/Pr27Zujjjqq9XlLS0vmzZuXt7/97fpbRY455picccYZGTlyZI4//ni9rRK//OUv8+tf/zoXXHBBm/E3698f//hH/e3misVinnzyyTzwwAM5/vjjc+yxx+Zzn/tcmpqa9BcAAOhSNeUuYGfR2NjYJkBP0vq8qampHCXRSUr19vW+vtk83c+1116b5cuXZ/78+bn99tv1t0p86Utfyrp163LppZdm1qxZ/tutAhs3bsxnPvOZfPrTn06vXr3azL1Z/zZs2KC/3dyaNWta+3j99dfn6aefzpVXXpkNGzboLwAA0KWE6F2krq5usx/cXn/+xh/8qSx1dXWbfZqgqampta+let+3b9+uKpEOuPbaa/PVr3411113XQ499FD9rSKv75e9cePGfPzjH8+kSZPS2NjY5hi9rSw33nhjjjjiiDafJHldqf69WX/f+GkjymfffffNQw89lD322COFQiFDhw5NS0tLPvGJT2TMmDH6CwAAdBkhehcZNGhQ/vSnP6W5uTk1Na/9ta9duza9evUSyFS4QYMGZcWKFW3G1q1b1/ox8kGDBmXdunWbzQ8dOrTLamTrXHHFFbnzzjtz7bXX5vjjj0+iv5Vu3bp1Wbx4cY499tjWsYMPPjivvvpqBg4cmFWrVm12vN5Wju9+97tZt25d6/1GXg9N//M//zMTJkxot39v1t+BAwd2QeVsrX79+rV5PmTIkGzcuDEDBw7UXwAAoMvYE72LDB06NDU1NW1uSLdo0aIceeSR6dFDGypZfX19Hn/88WzYsKF1bNGiRamvr2+dX7RoUetcY2Njli9f3jpP93DjjTfmrrvuyhe+8IWcdNJJreP6W9mefvrpTJs2Lc8//3zr2LJly7LXXntl1KhRelvhvv71r+fee+/Nt771rXzrW9/KMccck2OOOSbf+ta3Ul9fn8ceeyzFYjHJa/trP/rooyX7++yzz+bZZ5/V327k5z//ecaOHdvmEyO/+c1v0q9fv4waNUp/AQCALiO97SK9e/fOqaeemksvvTRLly7Nj370o9x2220588wzy10a22nMmDHZZ599MmPGjDQ0NGTu3LlZunRpJk+enCSZNGlSHn300cydOzcNDQ2ZMWNG9ttvv4wdO7bMlfO6lStX5qabbsq5556bUaNGZe3ata0P/a1sRx55ZIYNG5ZLLrkkK1asyMKFC3Pttdfm/PPP19sqsO++++aAAw5ofey2227ZbbfdcsABB+SEE07ISy+9lKuuuiorVqzIVVddlcbGxpx44olJktNPPz3f/va3c/fdd+eJJ57IRRddlPe85z3Zf//9y3xVvG7kyJGpq6vLv/zLv2TVqlVZuHBhrrnmmnz4wx/WXwAAoEsViq8v4WGHa2xszKWXXpof/OAH6dOnT84555ycddZZ5S6LbXDYYYfla1/7WmuY9tRTT2XmzJlZsmRJDjjggFxyySX5n//zf7Yev3Dhwvzrv/5rnnvuuYwcOTJXXHGFH+S7kblz5+bzn/98u3O//e1v9bfCPf/887niiivyy1/+Mr17984HP/jBnHfeeSkUCnpbZS6++OIkydVXX50kWbp0aT7zmc9k5cqVOeyww3LZZZfl8MMPbz3+P/7jP/KlL30pf/7zn/POd74zV1xxRfbcc8+y1E77Ghoa8q//+q9ZvHhxdtttt3zgAx/I1KlTUygU9BcAAOgyQnQAAAAAACjBdi4AAAAAAFCCEB0AAAAAAEoQogMAAAAAQAlCdAAAAAAAKEGIDgAAAAAAJQjRAQAAAACgBCE6AAAAAACUIEQHAAAAAIASaspdAADld8wxx+SZZ57ZbPxtb3tb7rzzzjJUBAAAANA9CNEBSJJccsklGT9+fJuxXXbZpUzVAAAAAHQPQnQAkiS77757Bg4cWO4yAAAAALoVe6IDsEUvv/xyZsyYkXe84x054ogjcsIJJ+RHP/pR6/xhhx2WL37xixk7dmzOP//8JMmvf/3rTJw4McOHD8/JJ5+c//zP/yxX+QAAAADbxUp0ALboqquuypNPPpnbbrstvXv3zq233pqZM2fm3e9+d2pra5MkP/3pT3PnnXempaUla9euzXnnnZePfOQjOeqoo7J48eJcfPHF6d+/f0aPHl3mqwEAAADomEKxWCyWuwgAyuuYY47J2rVrU1PT9nerDz74YL7//e/niCOOyKGHHpokWbVqVU488cT813/9V/bZZ58cdthhufTSS3P66acnSa6//vqsXLkyN9xwQ+v7XH311XnmmWfajAEAAABUAivRAUiSTJ8+PX//93/fZqx379459dRT86Mf/Sjf/OY3s2rVqjz++ONJkk2bNrUet++++7b+edWqVfnpT3+akSNHto69+uqrectb3rKDrwAAAACg8wnRAUiS9O/fPwcccMBm45/4xCfy2GOP5ZRTTsnpp5+egQMH5v3vf3+bY+rq6lr/3NzcnJNPPrl1f/TXvXGVOwAAAEAlkGgAUNLLL7+c++67L9/85jczfPjwJMnChQuTJKV2A3vLW96Sxx57rE0gf9ttt6WpqWmzYB0AAACgu+tR7gIA6L5qa2vTu3fv/OAHP8jTTz+dn//857n88suTJE1NTe2+5owzzsiyZcty3XXX5fe//33uvffefOELX8jgwYO7snQAAACATiFEB6Ck2traXHvttfnP//zPnHTSSbn66qvzz//8zxk4cGB+85vftPuafffdN3PmzMnPf/7zTJgwIddff30uvvji/MM//EMXVw8AAACw/QrFUp/HBwAAAACAnZyV6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAoQYgOAAAAAAAlCNEBAAAAAKAEIToAAAAAAJQgRAcAAAAAgBKE6AAAAAAAUIIQHQAAAAAAShCiAwAAAABACUJ0AAAAAAAo4f8HTJVh4VaCv/wAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1500x700 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2, figsize=[15, 7])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', ax=axes[0])\n",
    "sns.boxplot(cleaned_titanic_train, y='Fare', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "船票金额呈右偏态分布，说明数据集中的大多数船票价格中等，但有一些票价很高的极端值，使得均值被拉高。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.889963600Z",
     "start_time": "2024-04-08T10:02:37.343759200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9oklEQVR4nO3de7xVdZ0//tc+wIEDiCig4200b3hHgi9UagpqXktDm0a/5Tia2ggx862xQis1MU0sL3kpRk1Lwxtlak5ZjplmeUGBUdO4aJKogRcMOXCAvX9/+OPMnA5yDnjO2ufyfD4e55H7sz57rfda7DeXV2t9dqlSqVQCAAAAAAWqqXYBAAAAAHQ/QikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACtez2gVU22uv/TWVSrWr2HClUjJo0Ead/jygrekNaE5fQHP6AprTF7B2eqP11lyrlnT7UKpSSZf4MHWV84C2pjegOX0BzekLaE5fwNrpjbbj8T0AAAAACieUAgAAAKBwQikAAAAACtft15QCAAAA2BCVSiWrVq2sdhmF69GjZ2pq3vt9TkIpAAAAgPW0atXKvPbaK6lUytUupSrq6vpnwIBNUyqVNngfQikAAACA9VCpVLJkyeupqanJxhsPSanUfVZHqlQqaWhYkaVL30iSbLzxoA3el1AKAAAAYD2Uy6uzcuXybLzx4NTW9ql2OYWrre2dJFm69I1stNEmG/woX/eJ8gAAAADaQLn8ziN7PXp033t91gRTq1ev2uB9CKUAAAAANsB7WU+ps2uLcxdKAQAAAFC4qoZSr776aiZOnJhRo0Zlv/32ywUXXJAVK1YkSSZPnpyhQ4c2+bnxxhsb33v33XfnoIMOyrBhwzJ+/Pi8/vrr1ToNAAAAgEarVq3Ktdd+L5/4xFEZM+aDGTfuiHznO9/OsmVvt/mxrr32e5kw4dQ232+S7LvvyDzxxOPtsu+kigudVyqVTJw4MQMGDMhNN92UJUuW5Mwzz0xNTU2+9KUvZd68efnCF76Qj3/8443v6d+/f5Jk9uzZOeuss3Luuedml112yfnnn59Jkyble9/7XrVOBwAAACBJcvXVl+exxx7Jl750Vrbaauu89NKfc9llF2fBggW56KJL2vRYxx336XziE//YpvssStXulJo/f35mzpyZCy64IDvttFNGjhyZiRMn5u67706SzJs3L7vttluGDBnS+FNXV5ckufHGG3PYYYfl6KOPzi677JKLLrooDzzwQBYsWFCt0wEAAABIktxzz935zGf+JSNHjsoWW2yZkSNH5d///cw8/PCDWbx4cZseq2/fvhkwYOM23WdRqhZKDRkyJNdcc00GDx7cZHzp0qVZunRpXn311Wy33XZrfe+sWbMycuTIxtdbbLFFttxyy8yaNas9SwYAAABoUU1NKU888Vjjt/QlyR577Jkf/vDWDBw4MMce+9Hcc89djdueeOLx7LvvOznHyy8vzL77jsz111+TQw8dk29849yMHfuhJo/RLVv2dsaO/VBmzZrZ+PheuVzO0Ucflp/97M7GeZVKJR//+OH5xS/uSZLMmvVkTj750xk7dp+ccMIn8+tf39ek7u9//z9y5JEH54gjDszdd9/RHpemiao9vjdgwIDst99+ja/L5XJuvPHGfOADH8i8efNSKpXy3e9+N7/5zW8ycODA/PM//3Pjo3x/+ctfstlmmzXZ36BBg/LKK68Ueg4AAAAAf+sTnzgu11zz3fzmN7/Ohz60b0aOHJVRoz6Y971v+1bvY/bsWbn22h+mXC7nr399Kw888F95//vfCa5++9sHM3DgJtlrr2F5/PFHkiQ1NTUZM+agPPDA/TniiI8lSZ5++r+zZMmS7Lff/nnttcX54hf/LaeeenpGj/5Qnn76v3P++edmk002zbBhw/PTn/44t946LV/5yrnZbLPN8q1vfbPtL8zfqFoo9bemTJmSZ555JrfffnuefvrplEqlbL/99vnUpz6Vxx57LF/96lfTv3//HHzwwVm+fHlqa2ubvL+2tjYNDQ3rfdzO/u2Na+rv7OcBbU1vQHP6AprTF9CcvoC1+9+90VJ/nHjiZ7LlllvlJz+5LXfe+ZPcccf09O3bL//6r19oDIxa8g//cFy22mrrJMmBB34kV155Wf7t385IqVTKr399X8aMOSilvynkwAM/kokTT8uyZW+nb99+uf/++/LBD34offv2y003/SAjR47KMcd8Mkmy9dbb5I9/fC633vqjDBs2PHfddUc++cnjs88+79xA9KUvfSWf/vQ/tOq6/O31aO3vHx0ilJoyZUpuuOGGXHLJJdl5552z0047ZcyYMRk4cGCSZJdddskLL7yQadOm5eCDD07v3r2bBVANDQ2Na06tj0GDNmqLU6i6rnIe0Nb0BjSnL6A5fQHN6QtYu0GDNsry5cvz+us16dGjlJ49174y0uGHH5HDDz8iS5a8md///ne57babc+GF52Xo0J2TvPOI35r39ujxzv/27FnT+N9bb71V4/b99z8gF154Xp577unsuONOeeSR3+Wqq/4jPXvWpKamlFLpnX3tvfewDBo0OI888nAOPviQ/OY392fChH9Nz541efHFF/Lb3z6Ygw/+n6fWVq1alb//+23Ts2dNXnhhfk4++ZTGY+60046pq6tLjx41az3HcrmUmpqabLJJv/Tp02eDrmXVQ6nzzjsv06ZNy5QpU3LIIYckSUqlUmMgtcb222+f3//+90mSzTffvNnCYIsXL86QIUPW+/ivvfbXVCobVntHUCq90xCtOY/edXUpV9YdV9aUKllRX9+GFUJ1rE9vQHehL6A5fQHN6QtYu//dGw0NDSmXy1m9upJVq8pN5s2dOyf/+Z9353Of+39Jkn79BuTAAw/Jhz88Np/85NF59NFHUyqVUi7/z3sbGlYmSVatKmf16nfGevTo1bi9V6/e2Wef/XLffffllVdezaabDsrOO++aVavKKZcrqVT+Z19jxx6c++77VbbYYuu8+eYbGT16n6xaVc6qVavykY8clhNOOKlJvT179mx87+rV5Sbn06NHz2Zja6xeXUm5XM4bb7ydXr1WrvVataSqodQVV1yRm2++Od/+9rdz6KGHNo5fdtllefLJJ3P99dc3jj377LPZfvt3nr0cNmxYZsyYkXHjxiVJXn755bz88ssZNmzYetdQqaRL/EbbmvMoV0q59s6V65xz8sd6dYnrAWt0lR6HtqQvoDl9Ac3pC1i7lnpj9erVueWWm3LIIYdl5513aRzv1atX+vTpk4EDN0nPnj2zbNnbjdsWLnypxeMeeOAhmTr1yrz++uIceOBH3nXeQQd9JBMmnJqtt94m++zz4ca7mLbZZts89dTsbL31No1zp027MStXNuSEE07K+963Q/7wh2ey7777J3lnwfWlS//aYl3v5feKqn373rx583LVVVfllFNOyYgRI7Jo0aLGnzFjxuSxxx7LtddemxdffDE/+tGPcscdd+Skk95J84477rj89Kc/zW233ZZnn302X/ziF3PAAQdkm222aeGoAAAAAO1n6NBd8qEP7Zsvf/kLuffen+fllxfmqaf+OxdffEEaGhpywAFjs+uuu+fuu+/M/Plz88QTj+fmm29scb8f+MCHsnjxovzmNw9k7NiD33XeTjsNzeDBQzJ9+q058MD/mTdu3Cfy7LN/yNSpV2XBghdz770/z9SpV+bv/m6LJMmxx34yt912c3796/syf/7cXHjheampad/YqGp3St13331ZvXp1rr766lx99dVNtj333HO57LLLcvnll+eyyy7LVlttlW9961sZPnx4kmT48OH5+te/nssvvzxLlizJPvvsk/POO68apwEAAADQxNe/fmFuuOHaXHfd1PzlL6+kT5+6jBr1gVxxxX+kb99+OeWUf8n555+Tk0/+dP7+77fLZz7zLzn77Enr3GdtbW322++APPPMU9lpp53XOXfs2INz223TMnr0hxrH/u7vtsg3v/ntXH31dzJt2g8zePBmmTDh3/KRjxyWJDnkkMPz5ptv5JJLpmTFiuX51KdOzNy5f3zvF2MdSpVK974hc/Hizv2cdKmUDB68UavOo7aub6se32uoX9aGFUJ1rE9vQHehL6A5fQHN6QtYu//dGw0NDXnttZczaNAW6dWrttqlVcXKle9+DdZcq5ZU7fE9AAAAALovoRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAFA4oRQAAAAAhRNKAQAAAHRTK1asyAUXfD2HHnpAjjrqkEybdmNhx+5Z2JEAAAAAupGamlJqakqFHa9crqRcrqzXe6666rI8++wfctll380rr7yc888/J3/3d3+XMWMOaqcq/4dQCgAAAKCN1dSUsskm/QoPpd544+1WB1P19fW5666f5uKLL8vQobtk6NBd8vzz8zJ9+q1CKQAAAIDOaM1dUvc83JDXl6zf3UsbYtONSzn8Q7WpqSm1OpSaO/ePWb16Vfbcc1jj2F577Z0f/OD7KZfLqalp31WfhFIAAAAA7eT1JZX85Y32D6U2xGuvLc7GGw9Mr169Gsc23XRQGhpWZMmSJdlkk03a9fgWOgcAAADohpYvX94kkErS+HrlyoZ2P75QCgAAAKAbqq3tnZUrVzYZW/O6T58+7X58oRQAAABANzRkyJAsWfJmVq1a1Tj2+uuvpXfv3unff6N2P75QCgAAAKAb2mmnoenRo2eefvqpxrHZs2dm1113b/dFzhOhFAAAAEC31KdPnxx22BG5+OJv5A9/eDq/+c2vM23aD/OJT/xjIcf37XsAAAAA7WTTjUsd+jif+9znc/HFF2TixM+mX7/+Ofnk07L//mPbuLq1E0oBAAAAtLFyuZJyuZLDP1Rb+DHXR58+ffKVr5ybr3zl3Haq6t0JpQAAAADaWLlcyRtvvJ2ammLulFpzzPUNpapJKAUAAADQDjpbSFQ0C50DAAAAUDihFAAAAACFE0oBAAAAUDihFAAAAACFE0oBAAAAUDihFAAAAACFE0oBAAAAUDihFAAAAEA319DQkE9/+h/yxBOPF3bMnoUdCQAAAKAbqakppaamVNjxyuVKyuXKer9vxYoVOffcr+T55+e3Q1XvTigFAAAA0MZqakrZdJO+KdUU95BapVzO628sW69g6vnn5+fcc7+SSmX9w6z3SigFAAAA0MZqakop1dSk/plfpPz26+1/vH6bpm63Q1JTU1qvUGrmzCfy/vePyKmnjs9BB+3bjhU2J5QCAAAAaCflt19Peemiapfxrj7+8WOrdmwLnQMAAABQOKEUAAAAAIUTSgEAAABQOKEUAAAAAIUTSgEAAABQON++BwAAANBOavpt2qWO05aEUgAAAABtrFyupFIup263Qwo7ZqVcTrlc2eD3P/TQ421YTcuEUgAAAABtrFyu5PU3lqWmplToMd9LKFU0oRQAAABAO+hsIVHRLHQOAAAAQOGEUgAAAAAUTigFAAAAQOGEUgAAAAAboFLpvutFtcW5C6UAAAAA1kNNzTtxyurVq6pcSfU0NKxIkvToseHfoefb9wAAAADWQ01Nj/Tq1SdLl76ZHj16pFTqPvf8VCqVNDSsyNKlb6Surn9jQLchhFIAAAAA66FUKmXjjTfNa6+9ktdff7Xa5VRFXV3/DBiw6Xvah1AKAAAAYD317Nkrm222dVatWlntUgrXo0fP93SH1BpCKQAAAIANUCqV0qtXbbXL6LS6z0OPAAAAAHQYQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAACieUAgAAAKBwQikAAAAAClfVUOrVV1/NxIkTM2rUqOy333654IILsmLFiiTJggULcuKJJ2bvvffO4YcfnoceeqjJex9++OEceeSRGTZsWE444YQsWLCgGqcAAAAAwAaoWihVqVQyceLE1NfX56abbsoll1yS+++/P5deemkqlUrGjx+fwYMHZ/r06TnqqKMyYcKELFy4MEmycOHCjB8/PuPGjcvtt9+eTTfdNKeffnoqlUq1TgcAAACA9dCzWgeeP39+Zs6cmd/+9rcZPHhwkmTixIn55je/mQ9/+MNZsGBBbr755vTt2zc77LBDfve732X69On53Oc+l9tuuy177LFHTjrppCTJBRdckH322SePPvpoRo8eXa1TAgAAAKCVqnan1JAhQ3LNNdc0BlJrLF26NLNmzcpuu+2Wvn37No6PGDEiM2fOTJLMmjUrI0eObNxWV1eX3XffvXE7AAAAAB1b1e6UGjBgQPbbb7/G1+VyOTfeeGM+8IEPZNGiRdlss82azB80aFBeeeWVJGlx+/oolTag+A5kTf1teR6d/ZpA0j69AZ2dvoDm9AU0py9g7fRG67X2GlUtlPpbU6ZMyTPPPJPbb789119/fWpra5tsr62tTUNDQ5Kkvr5+ndvXx6BBG2140R1Ia87j7fqkf/8e65zTs0ey8eCucU0g6To9Dm1JX0Bz+gKa0xewdnqj7XSIUGrKlCm54YYbcskll2TnnXdO79698+abbzaZ09DQkD59+iRJevfu3SyAamhoyIABA9b72K+99td05vXRS6V3GqI159GrT98sXbpynXNWre6VxYuXtWGFUB3r0xvQXegLaE5fQHP6AtZOb7TemmvVkqqHUuedd16mTZuWKVOm5JBDDkmSbL755pk7d26TeYsXL258ZG/zzTfP4sWLm23fdddd1/v4lUq6xIepLc+jK1wPWKOr9Di0JX0BzekLaE5fwNrpjbZTtYXOk+SKK67IzTffnG9/+9s54ogjGseHDRuWp59+OsuXL28cmzFjRoYNG9a4fcaMGY3b6uvr88wzzzRuBwAAAKBjq1ooNW/evFx11VU55ZRTMmLEiCxatKjxZ9SoUdliiy0yadKkzJkzJ1OnTs3s2bNz7LHHJkmOOeaYPPHEE5k6dWrmzJmTSZMmZeutt87o0aOrdToAAAAArIeqhVL33XdfVq9enauvvjr77rtvk58ePXrkqquuyqJFizJu3LjceeedufLKK7PlllsmSbbeeut85zvfyfTp03PsscfmzTffzJVXXpmSJfABAAAAOoVSpdK9n4RcvLhzL1BWKiWDB2/UqvOoreuba+9c90LnJ3+sVxrqLXRO57c+vQHdhb6A5vQFNKcvYO30RuutuVYtqeqaUgAAAAB0T0IpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcB0ilGpoaMiRRx6ZRx55pHFs8uTJGTp0aJOfG2+8sXH73XffnYMOOijDhg3L+PHj8/rrr1ejdAAAAAA2QNVDqRUrVuTzn/985syZ02R83rx5+cIXvpCHHnqo8eeYY45JksyePTtnnXVWJkyYkFtuuSVvvfVWJk2aVI3yAQAAANgAPat58Llz5+YLX/hCKpVKs23z5s3LySefnCFDhjTbduONN+awww7L0UcfnSS56KKLMmbMmCxYsCDbbLNNe5cNAAAAwHtU1TulHn300YwePTq33HJLk/GlS5fm1VdfzXbbbbfW982aNSsjR45sfL3FFltkyy23zKxZs9qzXAAAAADaSFXvlDr++OPXOj5v3ryUSqV897vfzW9+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rjfalzulOqlnn302q1atyvDhwxvHRowYkVmzZqVcLlexMmh/jz76aEaPHp1bbrmlyfisWbOy2267pW/fvo1jI0aMyMyZMxu3jxw5snFbXV1ddt9998bt0FkNGTIk11xzTQYPHtxkfOnSpfqCbmuzzTbLpZdemv79+6dSqWTGjBl57LHHMmrUKH1Bt/fNb34zRx11VHbcccfGsVmzZmXEiBEplUpJklKplPe///3v2hdbbLFFttxyy8yaNavQ2qG9zJs3L9ttt12zcb3RvoRSndSiRYuyySabpLa2tnFs8ODBWbFiRd58883qFQYFOP7443PmmWemrq6uyfiiRYuy2WabNRkbNGhQXnnllVZth85qwIAB2W+//Rpfl8vl3HjjjfnABz6gLyDJ2LFjc/zxx2f48OE55JBD9AXd2u9+97s8/vjjOf3005uMt/S5/8tf/qIv6LIqlUqef/75PPTQQznkkENy0EEH5eKLL05DQ4PeaGc9q10AG6a+vr5JIJWk8XVDQ0M1SoKqe7e+WNMTLW2HrmLKlCl55plncvvtt+f666/XF3R7l19+eRYvXpxzzjknF1xwgT8v6LZWrFiRs88+O1/72tfSp0+fJtta+twvX75cX9BlLVy4sLEHLr300vz5z3/O5MmTs3z5cr3RzoRSnVTv3r2bfcjXvP7bP2Cgu+jdu3ezOwUbGhoae+Ld+mbAgAFFlQjtbsqUKbnhhhtyySWXZOedd9YXkGTPPfdM8s4/yP/93/89xxxzTOrr65vM0Rd0B1dccUX22GOPJnfXrvFun/uW+uJv71yHzmirrbbKI488ko033jilUim77rpryuVyzjjjjIwaNUpvtCOhVCe1+eab54033siqVavSs+c7v4yLFi1Knz59/IWJbmvzzTfP3Llzm4wtXry48XbazTffPIsXL262fddddy2sRmhP5513XqZNm5YpU6bkkEMOSaIv6L4WL16cmTNn5qCDDmoc23HHHbNy5coMGTIk8+fPbzZfX9DV/exnP8vixYsb16Vd8w/pX/ziFznyyCPX+rlvqS+GDBlSQOXQ/gYOHNjk9Q477JAVK1ZkyJAheqMdWVOqk9p1113Ts2fPJgtuzpgxI3vuuWdqavyy0j0NGzYsTz/9dJYvX944NmPGjAwbNqxx+4wZMxq31dfX55lnnmncDp3ZFVdckZtvvjnf/va3c8QRRzSO6wu6qz//+c+ZMGFCXn311caxp556KptuumlGjBihL+iWfvjDH+auu+7KHXfckTvuuCNjx47N2LFjc8cdd2TYsGF58sknU6lUkryzxs4TTzzxrn3x8ssv5+WXX9YXdAkPPvhgRo8e3eQu2j/84Q8ZOHBgRowYoTfakfSik6qrq8vRRx+dc845J7Nnz86vfvWrXHfddTnhhBOqXRpUzahRo7LFFltk0qRJmTNnTqZOnZrZs2fn2GOPTZIcc8wxeeKJJzJ16tTMmTMnkyZNytZbb53Ro0dXuXJ4b+bNm5errroqp5xySkaMGJFFixY1/ugLuqs999wzu+++e84888zMnTs3DzzwQKZMmZLPfvaz+oJua6uttsq2227b+NOvX7/069cv2267bQ499NC89dZbOf/88zN37tycf/75qa+vz2GHHZYkOe644/LTn/40t912W5599tl88YtfzAEHHJBtttmmymcF793w4cPTu3fvfOUrX8n8+fPzwAMP5KKLLspnPvMZvdHOSpU1cR+dTn19fc4555zce++96d+/f04++eSceOKJ1S4LCjV06ND84Ac/aPyHwp/+9KecddZZmTVrVrbddtuceeaZ+dCHPtQ4/4EHHsg3vvGNvPLKKxk+fHjOO+88f2DQ6U2dOjXf+ta31rrtueee0xd0W6+++mrOO++8/O53v0tdXV0+9alP5bTTTkupVNIXkOTLX/5ykuTCCy9MksyePTtnn3125s2bl6FDh+bcc8/Nbrvt1jj/xz/+cS6//PIsWbIk++yzT84777xssskmVakd2tqcOXPyjW98IzNnzky/fv3yj//4jxk/fnxKpZLeaEdCKQAAAAAK5/E9AAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcEIpAAAAAAonlAIAAACgcD2rXQAAQHczduzYvPTSS83G3//+92fatGlVqAgAoHhCKQCAKjjzzDNz+OGHNxnr1atXlaoBACieUAoAoAo22mijDBkypNplAABUjTWlAAA6kKVLl2bSpEn54Ac/mD322COHHnpofvWrXzVuHzp0aC677LKMHj06n/3sZ5Mkjz/+eMaNG5e99torH/3oR/OLX/yiWuUDALSaO6UAADqQ888/P88//3yuu+661NXV5ZprrslZZ52VD3/4w6mtrU2S3H///Zk2bVrK5XIWLVqU0047Lf/v//2/7Lfffpk5c2a+/OUvZ9CgQRk5cmSVzwYA4N2VKpVKpdpFAAB0J2PHjs2iRYvSs2fT/3/wt7/9bX7+859njz32yM4775wkmT9/fg477LD8+te/zhZbbJGhQ4fmnHPOyXHHHZckufTSSzNv3rx85zvfadzPhRdemJdeeqnJGABAR+NOKQCAKpg4cWI+8pGPNBmrq6vL0UcfnV/96le59dZbM3/+/Dz99NNJktWrVzfO22qrrRr/e/78+bn//vszfPjwxrGVK1fmfe97XzufAQDAeyOUAgCogkGDBmXbbbdtNn7GGWfkySefzFFHHZXjjjsuQ4YMySc/+ckmc3r37t3436tWrcpHP/rRxvWl1vjbu7AAADoaf1sBAOggli5dmrvvvju33npr9tprryTJAw88kCR5txUX3ve+9+XJJ59sEnBdd911aWhoaBZUAQB0JL59DwCgg6itrU1dXV3uvffe/PnPf86DDz6Yr3/960mShoaGtb7n+OOPz1NPPZVLLrkkL7zwQu666658+9vfzpZbbllk6QAA600oBQDQQdTW1mbKlCn5xS9+kSOOOCIXXnhh/uVf/iVDhgzJH/7wh7W+Z6uttsp3v/vdPPjggznyyCNz6aWX5stf/nI+9rGPFVw9AMD68e17AAAAABTOnVIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDhhFIAAAAAFE4oBQAAAEDh/j8HZqjrTER8QwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1200x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplots(1, 1, figsize=[12, 5])\n",
    "sns.histplot(cleaned_titanic_train, x='Fare', hue='Survived', alpha=0.4)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 船舱等级与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:37.890962Z",
     "start_time": "2024-04-08T10:02:37.597412900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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MmvWLCZMmMCtt95KaGgoAwYMYODAgWZHK3WG2+12mx1CRERERAKbdt+LiIiIiOlUSkVERETEdCqlIiIiImI6lVIRERERMZ1KqYiIiIiYTqVUREREREynUioiIiIiplMpFRERERHTqZSKiIj4sE6dOtGwYcOCS1xcHD169OC1114r0n3ffffd0g8pUgQ6zaiIiIiPGzNmDL169QLA4XCwevVqxo4dS2RkJH369DE3nEgRaaRURETEx1WsWJHY2FhiY2OpWrUqN954I61bt+azzz4zO5pIkamUioiI+CGbzUZQUBAOh4MXXniBdu3akZiYyPDhw8nKyjrn9tnZ2YwePZrWrVtz5ZVX0qNHDz7//POC6z/++GO6d+9OfHw8vXr1KnTdG2+8QXJyMvHx8fTt25fvv/++TF6j+BeVUhERET+Sn5/PZ599xjfffEPnzp2ZNm0a7733Hk8//TTvvPMOR44c4YknnjjnfhMnTuTnn3/mlVdeYfny5SQlJTF27FjsdjtHjhxh1KhR3HvvvXz66af069ePESNGcOzYMbZu3cqkSZN44okn+OSTT0hKSuLBBx/E5XKZ8OrFl+mYUhERER/3xBNPMGHCBAByc3MpV64cf//737nuuuto1aoVjzzyCNdccw0ATz75JJ988sk5j3H11Vdz11130aBBAwAGDRrEkiVLOHLkCFlZWeTn53PZZZdx+eWXM2jQIBo2bEhISAgHDhzAMAyqVatG9erVefDBB0lOTsblcmGxaOxLik6lVERExMcNHz6cbt26ARASEkJsbCxWq5WjR49y7Ngx4uLiCm5br149HnjggXMeo0+fPnz++ecsXryY3bt3s2XLFgCcTieNGzemY8eO3HXXXdSuXZvOnTtz8803ExoaSrt27WjQoAHXXXcdTZo0KbjOZlPFkOLRRxgREREfFx0dTc2aNalZsyaXXXYZVqsVoFjFcNSoUTz77LOEh4fTv39/XnrppYLrDMPgpZdeYsmSJXTv3p0VK1Zw4403sm3bNkJDQ1myZAmvv/46LVq04N1336Vv374cPny4xF+n+DeVUhERET8VHh5OVFQU27dvL9i2bds2rrnmGnJzcwu2ZWdns3z5cqZMmcLw4cPp2rUrx48fB8DtdpOWlsazzz5L06ZNeeihh/j3v/9N1apV+frrr/nhhx946aWXaNWqFaNHj+bTTz8lLy+P1NTUMn+94ts0ti4iIuLHBgwYwLRp06hSpQrR0dFMnDiRZs2aUa5cuYLbBAcHExoaymeffUalSpX4+eefGT9+PAB2u53w8HAWLlxIxYoVue6669i1axcHDhygSZMmlCtXjpkzZxITE0Pr1q1Zt24dp06domHDhma9ZPFRKqUiIiJ+bMiQIZw4cYIHH3wQh8NBx44deeyxxwrdJjg4mMmTJ/Pss8/y5ptvUr16df7xj38wdepUtm3bRu/evXnxxRd57rnnmDNnDtHR0YwYMYJ27doBnpn7s2bNYvz48VSrVo3JkydTt25dM16u+DDD7Xa7zQ4hIiIiIoFNx5SKiIiIiOlUSkVERETEdCqlIiIiImI6lVIRERERMZ1KqYiIiIiYTqVUREREREynUioiIiIiplMpFRERERHTqZSKiIiIiOlUSkVERETEdCqlIiIiImI6lVIRERERMd3/A9XHVAh54q9+AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "pclass_count = cleaned_titanic_train['Pclass'].value_counts()\n",
    "pclass_label = pclass_count.index\n",
    "axes[0].pie(pclass_count, labels=pclass_label) ##在第一个子图上绘制饼图，展示船票等级的分布情况。\n",
    "sns.countplot(cleaned_titanic_train, x='Pclass', hue='Survived', ax=axes[1])  #在第二个子图上绘制计数图，展示船票等级与存活之间的关系\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从是否幸存与船舱等级之间的柱状图来看，船舱等级低的乘客中遇难比例更大，船舱等级高的乘客中幸存比例更大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 性别是否与幸存有关"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.178135700Z",
     "start_time": "2024-04-08T10:02:37.728202200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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dTV7Pc8bYfZzrhNavCIUr+BsAS1e0fmIqOL8b3botFnB7H+xSx5yBlKDZGVlUblyZWbNmpXrXHZrpZ9f7r9epr+/j7/Y7XZ69erFmTNnaNeuHXFxcWRmZtK/f/9c19psNooWLcrSpUtznStVqtT1vBURERG3oFDqy/7Zwmjxdy6ZFFEFHLbcYRAg4yykn4DzJ5yB0Zbx13///virOz2gKAQVh8CiEBgGAUXAPwT8g3M+py0TcFz69dwggF5KpUqVOHz4MBEREa4QunbtWj788EMmTJhwTc+1e/dufvrpJ9avX09ERAQA7733HuAcAvDP1z179iwmk4kKFSoAsGvXLqZNm8a4ceMICgq60bcmIiJiCIVSyc1sAS4zNjOwqPNRvGLucw4HOOyAAzDlfXynAd3vN6pp06aUK1eOZ555hkGDBnH27FlGjBhB48aNsViubVxrWFgYZrOZTz/9lLi4OH799VemT58OgNVqzXFtlSpVaNasGUOGDGH48OFYLBZGjBhBsWLFCAsLy7f3JyIiUti0JJTkH9NfQdTsV6ATjtyBxWJh9uzZ2O12/vWvfzFgwABatGjB8OHDr/m5SpcuTWJiIm+88QYdOnRgzpw5DB8+HD8/P3bs2JHr+gkTJhAdHU3Pnj157LHHqFSpEpMnT86PtyUiImIYtZSKXIP//e9/rj+XL1+eOXPmXPK6+Ph44uPjXV9HR0eza9euyz5X165d6dq1a47zHTp0cP35798bERGhECoiIl5HLaUiIiIiYjiFUhERERExnEKpiIiIiBhOoVREREREDKdQKiIiIiKGUygVEREREcMplIqIiIiI4RRKRURERMRwCqUiIiIiYjiFUhERERExnEKpiIiIiBhOoVREREREDKdQKiIiIiKGUygVEREREcMplIqIiIiI4RRKRURERMRwCqUiIiIiYjiFUhERERExnEKpiIiIiBhOoVRExAAZGRkMHTqU+vXr07RpU+bNm2d0SSIihvIzugAREV80YcIEtm3bxvz58zl8+DDPPfccZcuW5Z577jG6NBERQyiUiogUsvPnz7N48WLeeOMNatasSc2aNUlKSuK9995TKBURn6XuexGRQrZz506ysrKIjY11HatXrx5btmzBbrcbWJmIiHEUSkVECllKSgrh4eEEBAS4jkVFRZGRkcGpU6eMK0xExEDqvhcRKWTp6ek5Aing+tpqteb5ecxmcDiur4ZbKwcQHGi6vm/2IFWinbe5gDI1MfkHG1xNwfOPquz6s9mAZif9XHmvG/nZMuXxR0KhVESkkAUGBuYKn9lfBwUF5fl5IiKKXncN4/tHXff3eqKozi8bXUKhCg8vYsjr6ufK+xXkz5a670VEClmpUqU4efIkWVlZrmMpKSkEBQURFhZmYGUiIsZRKBURKWQ1atTAz8+PzZs3u45t3LiR2rVrYzaiz1VExA3oXz8RkUIWHBxM586dSUxMZOvWraxevZp58+bRo0cPo0sTETGMyeG43mHyIiJyvdLT00lMTOSLL74gNDSU3r1707NnT6PLEhExjEKpiIiIiBhO3fciIiIiYjiFUhERERExnEKpiIiIiBhOoVRERLxSRkYGQ4cOpX79+jRt2pR58+YZXZJ4EavVSocOHfjxxx+NLsVraEcnERHxShMmTGDbtm3Mnz+fw4cP89xzz1G2bFnuueceo0sTD5eRkcHgwYNJSkoyuhSvolAqIiJe5/z58yxevJg33niDmjVrUrNmTZKSknjvvfcUSuWG7N69m8GDB6PFi/Kfuu9FRMTr7Ny5k6ysLGJjY13H6tWrx5YtW7Db7QZWJp5uw4YNNGrUiA8++MDoUryOWkpFRMTrpKSkEB4eTkBAgOtYVFQUGRkZnDp1ioiICAOrE0/20EMPGV2C11JLqYiIeJ309PQcgRRwfW21Wo0oSUSuQqFURES8TmBgYK7wmf11UFCQESWJyFUolIqIiNcpVaoUJ0+eJCsry3UsJSWFoKAgwsLCDKxMRC5HoVRERLxOjRo18PPzY/Pmza5jGzdupHbt2pjNuvWJuCP9zRQREa8THBxM586dSUxMZOvWraxevZp58+bRo0cPo0sTkcvQ7HsREfFKCQkJJCYm8uijjxIaGsqAAQO46667jC5LRC7D5NDqryIiIiJiMHXfi4iIiIjhFEpFRERExHAKpSIiIiJiOIVSERERETGcQqmIiIiIGE6hVEREREQMp1AqIiIiIoZTKBURERERwymUioiIeIDMzEymT59O69atqVWrFi1btmTcuHGkpaXl+2tNnz6d7t275/vzAlSrVo0ff/yxQJ5bPJu2GRUREfEAkyZNYt26dbz00kuUL1+e5ORkxowZw/79+3nttdfy9bV69epVYKFU5HIUSkVERDzAsmXLGDt2LHfccQcA0dHRJCYm8vDDD/Pnn39SsmTJfHutIkWK5NtzieSVuu9FREQ8gMlk4ocffsBut7uOxcbG8umnnxIeHk5cXBwffvih69yPP/5ItWrVADh48CDVqlVj5syZNGjQgISEBGrXrs0PP/zguj4tLY3atWvz888/u7rv7XY7zZo1Y+nSpa7rHA4HzZs356OPPgLg559/Jj4+njp16tCxY0dWrVqVo+4ZM2Zwxx130KhRIxYvXlwgn414B7WUioiIeIAePXowbdo0Vq9eTYsWLWjcuDFNmzalatWqeX6OTZs2sXTpUux2O6dPn+bLL7/k9ttvB+Cbb74hIiKCevXqsX79egDMZjP33HMPX375Jffffz8Amzdv5tSpU7Ru3ZqUlBQef/xxBg0aRLNmzdi8eTPPP/88kZGR1K9fnw8++IB33nmHl19+mdKlS/Piiy/m/wcjXkMtpSIiIh6gX79+TJw4kdKlS7No0SIGDhyYqxXzah599FEqVKjATTfdRPv27fnyyy9xOBwArFq1irZt22IymXJ8T/v27Vm7dq1rQtWqVato0aIFoaGhvPfeezRu3JhHHnmEihUr0qlTJ7p27cr8+fMBWLRoEY8++iitWrWiRo0avPTSS/n0aYg3UigVERHxEPfeey8LFy5k3bp1TJo0iZtvvplhw4axbdu2PH1/uXLlXH9u1aoVZ86cYcuWLaSnp7NmzRratWuX63vq1q1LiRIl+PbbbwH44osvXNft3buXr7/+mtjYWNdjwYIF7Nu3D4A9e/ZQo0YN13NVrVqVkJCQ63374uXUfS8iIuLmdu7cyfLly3n++ecBCA8Pp2PHjtx9993cddddOcaGZrPZbLmOBQYGuv4cEhJCq1atWLVqFceOHSMqKoo6depc8vXbtWvHqlWrqFixIidPnqRly5YAZGVl0bFjR5544okc1/v5XYwX2S2xlzon8ndqKRUREXFzNpuNt956ix07duQ4HhAQQFBQEBEREfj7+3Pu3DnXueTk5Ks+b/v27fn2229ZvXr1JVtJ/37d2rVrWbVqFXFxcQQHBwNQqVIl9u/fT8WKFV2Pr776ihUrVgBw88038+uvv7qe5+DBg5w5c+aa3rv4DoVSERERN1ezZk1atmxJ3759WbFiBQcPHmTz5s288MILWK1W7rrrLmrXrs2SJUv4/fff+fHHH5k3b95Vn7d58+b8+eefVw2lNWrUoGTJkixYsIC2bdu6jj/00ENs27aNKVOmsG/fPlasWMHkyZMpW7YsAI888gjvvPMOq1at4vfff2fYsGGYzYoecmn6yRAREfEAU6dOpVOnTsyYMYO2bdvy+OOPk5aWxoIFCwgNDeWpp54iLCyM+Ph4xowZw5NPPnnV5wwICKBNmzaULl2a6tWrX/Hadu3aYbFYaN68uetYuXLleO2111izZg0dOnRg6tSpPP/889x7770AdOrUiYEDBzJ69GgeeughmjRpQlhY2I19EOK1TI5/DvYQERERESlkaikVEREREcMplIqIiIiI4RRKRURERMRwCqUiIiIiYjiFUhERERExnEKpiIiIiBhOoVREREREDKdQKiIiIiKGUygVEREREcMplIqIiIiI4RRKRURERMRwCqUiIiIiYrj/B2tSDpeurUv4AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "sex_count = cleaned_titanic_train['Sex'].value_counts()\n",
    "sex_label = sex_count.index\n",
    "axes[0].pie(sex_count, labels=sex_label)\n",
    "sns.countplot(cleaned_titanic_train, x='Survived', hue='Sex', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从是否幸存与性别之间的柱状图来看，男性乘客中遇难比例更大，女性乘客中幸存比例更大。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 登船港口与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.235038100Z",
     "start_time": "2024-04-08T10:02:37.824383700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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pk2pUqXKZS9r1qzJ1bHef/99mjZtmme1rVmzhipVquTZ8a7lOYlvspldgIiIiFzqueeeo3Xr1pdsL1q0qAnViOQ/hVIREREPVLhwYaKjo80uQ6TA6PS9iIiIl2natCmLFi2iffv21KpVi0ceeYRDhw7Rt29fEhISaNOmDbt27cpxn3HjxnH99dfTqFEjZs+e7d6ekZFBUlISjRo1Ij4+nqZNmzJ//vwcjzV69GgaNmxI27Zt+etCkElJSTRu3JjDhw8DsH79etq1a0etWrW46667+OKLL3LcftKkSdx0003Ur1+fhQsX5vVLI15MoVRERMQLjR8/nv79+/Pee++xfft27rnnHho0aMCiRYsICQlh3Lhx7tseOnSIn3/+mfnz5/PUU0/x8ssvu/txTp8+nW+//ZaJEyfy+eef07ZtW4YPH05qaqr7/kuWLGHmzJmMGjUKwzDc29966y0++ugjZs6cSVxcHCkpKfTs2ZN27dqxZMkSHn30UZ599lnWr18PwPz583nnnXcYOXIks2bNYvHixQX0aok30Ol7ERERDzRkyBCGDx+eY1tcXByffPIJAO3ataNBgwYA3HjjjaSkpNC5c2cA7r77bt5++233/YKCghg1ahQRERFUrlyZtWvXMm/ePOrXr0/VqlW58cYbqV27NgCPP/44kydPZt++fRQrVsx9vOzBTdlh9tNPP2XSpEnMmjWLihUrAvDuu+/SoEEDHnzwQQDKli3Ljh07ePvtt6lbty4LFizgoYceokmTJgC89NJL3HHHHXn+2ol3UigVERHxQP369eO2227Lsc1m++Nju3Tp0u6fg4ODKVmyZI7rmZmZOW4bERHhvl69enX3qfPmzZvz/fffM2rUKPbu3cv27dsBsNvt7tv/+djZnn32WQIDAylevLh72969e1m2bBmJiYnubZmZmZQvXx6APXv20Lt3b/e+SpUqUahQoSu9FOInFEpFREQ8UFRUFGXLlv3b/VarNcd1i+Xve+T9dZ/D4SAgIACAV199lYULF9KuXTvatm3LkCFDLplCKigo6JJjjh49mhkzZvDyyy8zZswYALKysrjrrrt4/PHHc9z2z2H6r31S/7xP/Jv6lIqIiPi45ORk0tPT3de3bNlChQoVAJg3bx6DBw9mwIABtG7d2n27v4bHv2rZsiXPP/88n3zyCevWrQOgfPny7N+/n7Jly7ovX3/9NUuWLAGgcuXK/PTTT+5jHDx4kDNnzuTpcxXvpVAqIiLigX777TdSUlIuuZw/fz7Xx7p48SLPPPMMu3btYt68eXzxxRc89NBDAISHh7Ns2TKSk5NZv349Tz/9NOAalX8l2SP9hw0bRlZWFvfffz9bt27l1VdfZd++fSxZsoRx48YRFxcHwIMPPsg777zDF198wS+//MKgQYP+sYVX/IvazEVERDzQyJEjGTly5CXb//Of/+T6WNWqVSM2NpZ7772XiIgIRo4cSY0aNdyPM3ToUO644w5iY2Pp2LEjVquVHTt2cMstt1zx2P3796dly5bMnj2bhx9+mKlTpzJmzBhmzpxJbGwszz77LHfffTcAbdq0IS0tjeHDh3PhwgV69OjBzp07c/18xDcZziu1z4uIiIiI5DO1mYuIiIiI6RRKRURERMR0CqUiIiIiYjqFUhERERExnUKpiIiIiJhOoVRERERETKdQKiIiIiKmUygVEREREdMplIqIiIiI6RRKRURERMR0CqUiIiIiYjqFUhEREREx3f8D9jP8DgdCfTUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "embarked_count = cleaned_titanic_train['Embarked'].value_counts()\n",
    "embarked_label = embarked_count.index\n",
    "axes[0].pie(embarked_count, labels=embarked_label)\n",
    "sns.countplot(cleaned_titanic_train, x='Embarked', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从是否幸存与登船港口之间的柱状图来看，瑟堡登船的乘客，幸存数量大于遇难数量，而皇后镇和南安普敦则相反。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "##  家庭成员数量与是否幸存的关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:37.943876700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqUAAAFUCAYAAAAd/kUTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB04UlEQVR4nO3dd3hT9dvH8fc5SdNJ6aRSQPYoq5QNggzZorJUUEAFxQH2p4IiIAqiVkBZsgWUBxQEcbBcOBBUthSZQssoFGoLbelOM54/YqOV1ZHmpO39uq5c2JPknDu1bT75TsVqtVoRQgghhBBCQ6rWBQghhBBCCCGhVAghhBBCaE5CqRBCCCGE0JyEUiGEEEIIoTkJpUIIIYQQQnMSSoUQQgghhOYklAohhBBCCM1JKBVCCCGEEJqTUCqEEEIIITQnoVQIIYQQQmhOr3UBQgghiuby5TRko2ghhKtTFAgMrHDLx0koFUKIUspqRUKpEKLMkO57IYQQQgihOQmlQgghhBBCcxJKhRBCCCGE5mRMqRBCCCGEA1itVkymXK3LcDqdTo+qFr+dU0KpEEIIIUQxmUy5XL58CavVonUpmvD09MHXNwBFUYp8DgmlQgghhBDFYLVaSU29gqqqVKwYjKKUn9GRVqsVozGH9PRkACpWDCzyuSSUCiGEEEIUg8ViJjc3m4oVgzAYPLQux+kMBncA0tOTqVDBv8hd+eUnygshhBBClACLxdZlr9OV37a+vGBqNpuKfA4JpUIIIYQQDlCc8ZSlnSNee/mN9EIIUUaoqoKqFv4NwWKxYrHIllBCCNcgoVQIIUoxVVWo6OeNXlf4UGoyW0lNyZBgKkQJM5lMrFy5nK+/3kpS0l/4+wfQpctdjBz5JF5e3g691vLlS/j99/3Mn7/UoecF6NChJfPmLaZ585YOPzdIKBVCiFJNVRX0OoXnZyUSc77g6yPWrurG7BeCUVVFQqkQJWzRonns3bub8eMnUaVKVS5cOM/cue8QFxfHjBmzHXqtIUOGcf/9gx16TmeRUCqEEGVAzPlcjsQatS5DCHEdW7duZsKEV2nZsjUAlSuHMm7cREaPfpykpCSCgoIcdi0vLy+HncvZZKKTi8vJyWHixIm0bNmSDh06sGLFCq1LEkIIIUQhqKrCgQN77bP0ARo3bsKqVevw8/Nj0KB72Lp1k/2+Awf20aGDrYv84sV4OnRoyYcfLqNXry689dZUunZtz4ED++yPz8zMoGvX9kRHH2T58iWMGTMKi8VCv3692bJlo/1xVquV/v378M03WwGIjv6dkSOH0bXrHQwf/iA//fR9vro/+OB9+vbtzt1338XmzV+UxLcmH2kpdXEzZszg8OHDrFy5kvj4eMaPH09oaCi9evXSujQhhBBCFMD99w9h2bLF/PzzT7Rv34GWLVvTunU7atasVeBzHDoUzfLlq7BYLKSlXWX79h/sYzt/+WUHfn7+NG0azr59uwFQVZUuXbqxffuP3H33vQAcOfIHqampdOzYicuXk3jppecYNeoZ2rRpz5Ejf/Dmm1Px9w8gPDyCL7/8jHXr1vDKK1OpVKkS77473fHfmP+QllIXlpmZyfr165k0aRKNGjWie/fuPP7443z00UdalyaEEEKIAnr00cd59dVphISEsHHj57zyyvhrWjFv5YEHhlClSlWqVbudu+7qwc8//4TVahsP/tNP39OlS7drlmW6664e7Nu3m8zMDAB+/PF72rVrj5eXN599tp6WLVszcOCDVK1ajZ49+3Dvvf1Zt+5jADZt+oIHH3yIO+7oSN269Rk//hUHfTduTEKpCzt+/Dgmk4mIiAj7sRYtWhAdHZ2vC0AIIYQQrq1Hj94sWrSCTZu+5dVX36BmzVq8/fY0jh8/VqDnV64cav/vO+64k7S0qxw5cpjs7Gx27/6Nbt16XPOcxo2bEBgYxK+/7gTg559/5K67egJw9uxpfvllB927d7TfPvtsHXFx5wA4cyaWOnXq2c9Vs2YtPD09i/z6C0K6711YYmIi/v7+GAwG+7GgoCBycnJISUkhICBAw+qEEEIIcSunTp3kq6828+yzzwNQsaIfPXr0okuXu3jwwX4cOLD3mhZOs9l8zXn+nQU8PT25446ObN/+A0lJfxEQEEhYWKPrXr9r1+789NMPVK16OykpybRv38F+jR49ejN8+Ih8j9fr/x0N86/MUdI7VklLqQvLysrK90MI//xQGo0yy1YIIYRwdWazmU8++Yg//zye77ibmxseHh74+fmj1+vtXewA8fEXbnneu+7qyW+/7WTHjp+4665rW0nzdOvWg717d/HTT99zxx134uHhAUC1atU5fz6OqlWr2W87dmzn22+/AqBmzdocO3bUfp6LF+NJT08rxCsvPAmlLszd3f2a8Jn3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b2/53nvv2Xcn+uyzz+jatestn3P+/Hnq16/PrFmzbno+IYpLthkVQgghXMDEiRPp06dPvmNubm4OvcaIESOKHCJXrFjBfffdR+3atR1akxB5pKVUCCGEcAEVKlQgODg4383Pz8+h1/D29i7yOStVqsTrr7/u0HqE+DcJpUIIIYQLS09PZ8KECbRr147GjRvTq1cvtm3bZr+/fv36fPXVV/Tu3Zvw8HBeeOEF4uLiGD58OOHh4Tz00EMkJCQAN+5uf+yxx3jjjTfyHXvqqaeYM2eO/esJEyawd+9eNm7ceN06d+/eTf369fMde/nll3n55Zft137ppZeYNm0aERERdO3alZ07d7J69Wrat29P27Zt+b//+78ifY9E2SChVAghhHBhb775JqdPn2bFihVs3ryZli1bMmnSJIxGo/0x8+bN4+2332bJkiV8++23DBkyhCFDhrB27VoSExN5//33b3qNu+++m2+//Rar1QpAWloaO3fu5O6777Y/JiwsjIceeogZM2aQlpZWpNeydetWKlSowJdffknTpk157rnn2LlzJ6tWrWLYsGFMnz6dK1euFOncovSTUCqEEEK4gNdee42IiIh8t8zMTFq1asXrr79OWFgYNWrUYMSIEaSkpHD58mX7cx999FHCw8Np27YtYWFhtG/fnt69exMWFkaPHj04ffr0Ta/do0cPrly5woEDBwDYtm0bNWvWpG7duvke99xzzwEwe/bsIr1Gf39//ve//3H77bfTv39/0tLSmDRpErVr12bkyJGYTCbOnj1bpHOL0k8mOgkhhBAuIDIykh49euQ75unpSb9+/di2bRvr1q0jNjaWI0eOAGA2m+2Pq1atmv2/PTw8qFKlSr6v/92qej2+vr7ceeedfP3117Ro0YKvvvrqmklXAD4+PkyYMIFx48YxYMCAQr/GqlWroiiKvS7AXmve17eqVZRd0lIqhBBCuIDAwECqV6+e76YoCi+99BLTp0/H19eXIUOGsGTJkmueq9Pp8n2tqoV/e+/bty/ffvstV69e5ddff83Xdf9vd999N23btmXKlClYLBb78byw+W8mkynf13r9tW1hRalVlE3ykyCEEEK4qPT0dDZv3szs2bOJjIyke/fupKamAtjHfzpK165duXr1KsuXL6d+/frcfvvtN3zsq6++yvHjx/nyyy/tx/KWr0pPT7cfO3/+vENrFGWbhFIhhBDCRRkMBjw9Pfn22285f/48O3bssC/L5Ohubg8PD+666y4++OCDG7aS5qlZsyaPP/44Fy5csB+rW7cuHh4eLF68mLi4OJYtW8bRo0cdWqMo2ySUCiGEEC7KYDAwc+ZMvvnmG+6++27efvttnn76aYKDgzl27JjDr9enTx+MRuN1x5P+11NPPZVvLKuPjw/Tpk1jy5Yt9O3bl+PHj/Pwww87vEZRdilWR7f/CyGEEKJUWrduHRs3bmT16tValyLKIZl9L4QQQpRzZ8+e5fDhwyxatMi+7JMQzibd90IIIUQ5d/78eSZNmkTz5s255557tC5HlFPSfS+EEEIIITQnLaVCCCGEEEJzEkqFEEIIIYTmJJQKIYQQQgjNSSgVQgghhBCak1AqhBBCCCE0J6FUCCGEEEJoTkKpEEIIIYTQnIRSIYQQQgihOQmlQgghhBBCc/8Pr1NP3IBKKJQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 700x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure, axes = plt.subplots(1, 2)\n",
    "familyNum_count = cleaned_titanic_train['FamilyNum'].value_counts()\n",
    "familyNum_label = familyNum_count.index\n",
    "axes[0].pie(familyNum_count, labels=familyNum_label)\n",
    "sns.countplot(cleaned_titanic_train, x='FamilyNum', hue='Survived', ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从是否幸存与乘客家庭成员之间的柱状图来看，独身的乘客中遇难的多于幸存的。从有携带家庭成员的乘客来看，家庭成员在1～3位之间的幸存人数超过遇难人数，但同乘家庭成员超过3位后，遇难的更多。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.121222400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 13 columns):\n",
      " #   Column       Non-Null Count  Dtype   \n",
      "---  ------       --------------  -----   \n",
      " 0   PassengerId  891 non-null    object  \n",
      " 1   Survived     891 non-null    category\n",
      " 2   Pclass       891 non-null    category\n",
      " 3   Name         891 non-null    object  \n",
      " 4   Sex          891 non-null    category\n",
      " 5   Age          891 non-null    float64 \n",
      " 6   SibSp        891 non-null    int64   \n",
      " 7   Parch        891 non-null    int64   \n",
      " 8   Ticket       891 non-null    object  \n",
      " 9   Fare         891 non-null    float64 \n",
      " 10  Cabin        204 non-null    object  \n",
      " 11  Embarked     889 non-null    category\n",
      " 12  FamilyNum    891 non-null    int64   \n",
      "dtypes: category(4), float64(2), int64(3), object(4)\n",
      "memory usage: 66.8+ KB\n"
     ]
    }
   ],
   "source": [
    "cleaned_titanic_train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "## 分析数据\n",
    "在分析步骤中，我们将利用以上清理后到的数据，进行逻辑回归分析，目标是得到一个可以根据泰坦尼克号乘客各个属性，对沉船事件后幸存情况进行预测的数学模型。\n",
    "\n",
    "我们先引入做逻辑回归所需的模块。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.131076100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "import statsmodels.api as sm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "然后可以创建一个新的DataFramelr_titanic_train，让它作为我们进逻辑性回归分析所用的数据。\n",
    "\n",
    "和`cleaned_titanic_train`区分开的原因是，我们在进行回归分析前，还可能需要对数据进行一些准备，比如引入虚拟变量，这些都可以在`lr_titanic_train`上执行。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.132584800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund, Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen, Miss. Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen, Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  PassengerId Survived Pclass  \\\n",
       "0           1        0      3   \n",
       "1           2        1      1   \n",
       "2           3        1      3   \n",
       "3           4        1      1   \n",
       "4           5        0      3   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                            Braund, Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   \n",
       "2                             Heikkinen, Miss. Laina  female  26.0      0   \n",
       "3       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                           Allen, Mr. William Henry    male  35.0      0   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  FamilyNum  \n",
       "0      0         A/5 21171   7.2500   NaN        S          1  \n",
       "1      0          PC 17599  71.2833   C85        C          1  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S          0  \n",
       "3      0            113803  53.1000  C123        S          1  \n",
       "4      0            373450   8.0500   NaN        S          0  "
      ]
     },
     "execution_count": 193,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = cleaned_titanic_train.copy()\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "移除大概率不会影响乘客幸存概率的变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.142096400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Survived Pclass     Sex   Age  SibSp  Parch     Fare  FamilyNum\n",
       "0        0      3    male  22.0      1      0   7.2500          1\n",
       "1        1      1  female  38.0      1      0  71.2833          1\n",
       "2        1      3  female  26.0      0      0   7.9250          0\n",
       "3        1      1  female  35.0      1      0  53.1000          1\n",
       "4        0      3    male  35.0      0      0   8.0500          0"
      ]
     },
     "execution_count": 194,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = lr_titanic_train.drop(['PassengerId', 'Name', 'Ticket', 'Cabin', 'Embarked'], axis=1)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "数据里还存在分类变量，无法直接建立逻辑回归模型。我们需要引入虚拟变量，也就是用0和1分别表示是否属于该类别。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.149574Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Survived</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Survived   Age  SibSp  Parch     Fare  FamilyNum  Pclass_2  Pclass_3  \\\n",
       "0        0  22.0      1      0   7.2500          1         0         1   \n",
       "1        1  38.0      1      0  71.2833          1         0         0   \n",
       "2        1  26.0      0      0   7.9250          0         0         1   \n",
       "3        1  35.0      1      0  53.1000          1         0         0   \n",
       "4        0  35.0      0      0   8.0500          0         0         1   \n",
       "\n",
       "   Sex_male  \n",
       "0         1  \n",
       "1         0  \n",
       "2         0  \n",
       "3         0  \n",
       "4         1  "
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_titanic_train = pd.get_dummies(lr_titanic_train, drop_first=True, columns=['Pclass', 'Sex'], dtype=int)\n",
    "lr_titanic_train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "接下来，我们要把因变量和自变量划分出来。\n",
    "\n",
    "因变量是`Survived`变量，因为我们进行逻辑回归的目的，是根据其它可能对乘客生还概率有影响的变量，来预测幸存情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.157580Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "y = lr_titanic_train['Survived']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "我们可以把除`Survived`之外的先纳入自变量，但需要查看它们之间的相关性。如果其中有些变量之间相关性很高，会导致共线性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.238038200Z",
     "start_time": "2024-04-08T10:02:38.162002500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.232625</td>\n",
       "      <td>-0.179191</td>\n",
       "      <td>0.091566</td>\n",
       "      <td>-0.248512</td>\n",
       "      <td>0.006589</td>\n",
       "      <td>-0.281004</td>\n",
       "      <td>0.084153</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>-0.232625</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>0.159651</td>\n",
       "      <td>0.890712</td>\n",
       "      <td>-0.055932</td>\n",
       "      <td>0.092548</td>\n",
       "      <td>-0.114631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>-0.179191</td>\n",
       "      <td>0.414838</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.216225</td>\n",
       "      <td>0.783111</td>\n",
       "      <td>-0.000734</td>\n",
       "      <td>0.015790</td>\n",
       "      <td>-0.245489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>0.091566</td>\n",
       "      <td>0.159651</td>\n",
       "      <td>0.216225</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.217138</td>\n",
       "      <td>-0.118557</td>\n",
       "      <td>-0.413333</td>\n",
       "      <td>-0.182333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FamilyNum</th>\n",
       "      <td>-0.248512</td>\n",
       "      <td>0.890712</td>\n",
       "      <td>0.783111</td>\n",
       "      <td>0.217138</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.038594</td>\n",
       "      <td>0.071142</td>\n",
       "      <td>-0.200988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_2</th>\n",
       "      <td>0.006589</td>\n",
       "      <td>-0.055932</td>\n",
       "      <td>-0.000734</td>\n",
       "      <td>-0.118557</td>\n",
       "      <td>-0.038594</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.565210</td>\n",
       "      <td>-0.064746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_3</th>\n",
       "      <td>-0.281004</td>\n",
       "      <td>0.092548</td>\n",
       "      <td>0.015790</td>\n",
       "      <td>-0.413333</td>\n",
       "      <td>0.071142</td>\n",
       "      <td>-0.565210</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.137143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex_male</th>\n",
       "      <td>0.084153</td>\n",
       "      <td>-0.114631</td>\n",
       "      <td>-0.245489</td>\n",
       "      <td>-0.182333</td>\n",
       "      <td>-0.200988</td>\n",
       "      <td>-0.064746</td>\n",
       "      <td>0.137143</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                Age     SibSp     Parch      Fare  FamilyNum  Pclass_2  \\\n",
       "Age        1.000000 -0.232625 -0.179191  0.091566  -0.248512  0.006589   \n",
       "SibSp     -0.232625  1.000000  0.414838  0.159651   0.890712 -0.055932   \n",
       "Parch     -0.179191  0.414838  1.000000  0.216225   0.783111 -0.000734   \n",
       "Fare       0.091566  0.159651  0.216225  1.000000   0.217138 -0.118557   \n",
       "FamilyNum -0.248512  0.890712  0.783111  0.217138   1.000000 -0.038594   \n",
       "Pclass_2   0.006589 -0.055932 -0.000734 -0.118557  -0.038594  1.000000   \n",
       "Pclass_3  -0.281004  0.092548  0.015790 -0.413333   0.071142 -0.565210   \n",
       "Sex_male   0.084153 -0.114631 -0.245489 -0.182333  -0.200988 -0.064746   \n",
       "\n",
       "           Pclass_3  Sex_male  \n",
       "Age       -0.281004  0.084153  \n",
       "SibSp      0.092548 -0.114631  \n",
       "Parch      0.015790 -0.245489  \n",
       "Fare      -0.413333 -0.182333  \n",
       "FamilyNum  0.071142 -0.200988  \n",
       "Pclass_2  -0.565210 -0.064746  \n",
       "Pclass_3   1.000000  0.137143  \n",
       "Sex_male   0.137143  1.000000  "
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = lr_titanic_train.drop(['Survived'], axis=1)\n",
    "X.corr()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "一般我们认为，当相关系数的绝对值大于0.8的时候，可能导致严重共线性，所以我们检查的时候，找绝对值大于0.8的值即可。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.278600100Z",
     "start_time": "2024-04-08T10:02:38.170411Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Fare</th>\n",
       "      <th>FamilyNum</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Age</th>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SibSp</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Parch</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fare</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FamilyNum</th>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_2</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pclass_3</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sex_male</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Age  SibSp  Parch   Fare  FamilyNum  Pclass_2  Pclass_3  Sex_male\n",
       "Age         True  False  False  False      False     False     False     False\n",
       "SibSp      False   True  False  False       True     False     False     False\n",
       "Parch      False  False   True  False      False     False     False     False\n",
       "Fare       False  False  False   True      False     False     False     False\n",
       "FamilyNum  False   True  False  False       True     False     False     False\n",
       "Pclass_2   False  False  False  False      False      True     False     False\n",
       "Pclass_3   False  False  False  False      False     False      True     False\n",
       "Sex_male   False  False  False  False      False     False     False      True"
      ]
     },
     "execution_count": 198,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.corr().abs() > 0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从以上输出来看，`SibSp`和`FamilyNum`之间的相关系数绝对值大于0.8。这符合预期，因为`FamilyNum`是根据`SibSp`和`Parch`计算出来的。\n",
    "\n",
    "不同变量之间的如果相关性过高，会导致数值优化算法无法收敛，无法获得逻辑回归模型参数的计算结果，因此我们需要移除`FamilyNum`或`SibSp`。我们对同乘家庭成员是否会影响幸存概率感兴趣，所以保留`FamilyNum`。\n",
    "\n",
    "此外，如果仔细看相关系数数值，会发现`Parch`和`FamilyNum`之间也存在强相关，相关系数为0.78，接近0.8，因此我们也对`Parch`进行移除，避免算法无法收敛。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.278600100Z",
     "start_time": "2024-04-08T10:02:38.179135200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.443547\n",
      "         Iterations 6\n",
      "                           Logit Regression Results                           \n",
      "==============================================================================\n",
      "Dep. Variable:               Survived   No. Observations:                  891\n",
      "Model:                          Logit   Df Residuals:                      884\n",
      "Method:                           MLE   Df Model:                            6\n",
      "Date:                Mon, 08 Apr 2024   Pseudo R-squ.:                  0.3339\n",
      "Time:                        18:02:38   Log-Likelihood:                -395.20\n",
      "converged:                       True   LL-Null:                       -593.33\n",
      "Covariance Type:            nonrobust   LLR p-value:                 1.786e-82\n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "const          3.8097      0.445      8.568      0.000       2.938       4.681\n",
      "Age           -0.0388      0.008     -4.963      0.000      -0.054      -0.023\n",
      "Fare           0.0032      0.002      1.311      0.190      -0.002       0.008\n",
      "FamilyNum     -0.2430      0.068     -3.594      0.000      -0.376      -0.110\n",
      "Pclass_2      -1.0003      0.293     -3.416      0.001      -1.574      -0.426\n",
      "Pclass_3      -2.1324      0.289     -7.373      0.000      -2.699      -1.566\n",
      "Sex_male      -2.7759      0.199    -13.980      0.000      -3.165      -2.387\n",
      "==============================================================================\n"
     ]
    }
   ],
   "source": [
    "X = X.drop(['Parch', 'SibSp'], axis=1)\n",
    "#接下来，给模型的线性方程添加截距。\n",
    "X = sm.add_constant(X)\n",
    "#下一步就可以调用Logit函数，利用最大似然优化来得到逻辑回归模型的参数值，并输出总结信息。\n",
    "model = sm.Logit(y, X).fit()\n",
    "print(model.summary())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "当我们把显著区间设定为0.05时，以上结果的P值可以看出，模型认为船票价格对乘客幸存概率没有显著性影响。因此可以把这个变量移除后，再次建立逻辑回归模"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.279103600Z",
     "start_time": "2024-04-08T10:02:38.194436400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.444623\n",
      "         Iterations 6\n",
      "                           Logit Regression Results                           \n",
      "==============================================================================\n",
      "Dep. Variable:               Survived   No. Observations:                  891\n",
      "Model:                          Logit   Df Residuals:                      885\n",
      "Method:                           MLE   Df Model:                            5\n",
      "Date:                Mon, 08 Apr 2024   Pseudo R-squ.:                  0.3323\n",
      "Time:                        18:02:38   Log-Likelihood:                -396.16\n",
      "converged:                       True   LL-Null:                       -593.33\n",
      "Covariance Type:            nonrobust   LLR p-value:                 4.927e-83\n",
      "==============================================================================\n",
      "                 coef    std err          z      P>|z|      [0.025      0.975]\n",
      "------------------------------------------------------------------------------\n",
      "const          4.0620      0.404     10.049      0.000       3.270       4.854\n",
      "Age           -0.0395      0.008     -5.065      0.000      -0.055      -0.024\n",
      "FamilyNum     -0.2186      0.065     -3.383      0.001      -0.345      -0.092\n",
      "Pclass_2      -1.1798      0.261     -4.518      0.000      -1.692      -0.668\n",
      "Pclass_3      -2.3458      0.242     -9.676      0.000      -2.821      -1.871\n",
      "Sex_male      -2.7854      0.198    -14.069      0.000      -3.173      -2.397\n",
      "==============================================================================\n"
     ]
    }
   ],
   "source": [
    "X = X.drop(['Fare'], axis=1)\n",
    "model = sm.Logit(y, X).fit()\n",
    "print(model.summary())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "逻辑回归模型预测以下因素的增加（或存在）会降低幸存概率：年龄、同乘家庭成员数、不在一等舱、性别为男性。\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "要理解各个各个自变量系数的实际含义，我们需要计算自然常数的次方。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.515897800Z",
     "start_time": "2024-04-08T10:02:38.203213100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9612699539905982"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Age\n",
    "np.exp(-0.0395)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "以上结果说明，年龄每增加1岁，生还概率降低4%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.516896700Z",
     "start_time": "2024-04-08T10:02:38.207192600Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.803643111115195"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# FamilyNum\n",
    "np.exp(-0.2186)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "以上结果说明，每多一名同乘家庭成员，生还概率降低20%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.516896700Z",
     "start_time": "2024-04-08T10:02:38.211570900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.30734020049483596"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pclass_2\n",
    "np.exp(-1.1798)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "以上结果说明，二等舱乘客的生还概率比一等舱乘客低71%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.516896700Z",
     "start_time": "2024-04-08T10:02:38.215215400Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.09577055503172162"
      ]
     },
     "execution_count": 204,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pclass_3\n",
    "np.exp(-2.3458)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "以上结果说明，三等舱乘客的生还概率只有一等舱乘客的10%左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.516896700Z",
     "start_time": "2024-04-08T10:02:38.222499900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.061704402333015156"
      ]
     },
     "execution_count": 205,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Sex_male\n",
    "np.exp(-2.7854)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "以上结果说明，男性乘客的生还概率比女性乘客低94%左右。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "根据模型参数值，我们总结：\n",
    "- 年龄小的乘客幸存概率更高；\n",
    "- 女性乘客的生还率比男性乘客的幸存概率更高；\n",
    "- 来自的船舱等级高的乘客幸存概率更高；\n",
    "- 同乘家庭成员少的乘客幸存概率更高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "前两条背后的原因可能与泰坦尼克号沉船后逃生时，“让孩子和女性先走”的原则。第三条说明可能当时舱位更尊贵的乘客拥有了优先逃生的机会。第四条可能是因为拥有较大数量家庭成员的乘客在灾难发生时会急于解救其他家庭成员而非选择逃生，最后也失去了自己逃生的机会。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "得到模型后，我们将用于预测`titianic_test.csv`里泰坦尼克号乘客的生还情况。\n",
    "\n",
    "首先读取`titianic_test.csv`的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.516896700Z",
     "start_time": "2024-04-08T10:02:38.225008800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>3</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>3</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>female</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>2</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>male</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>3</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>male</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>3</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>female</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Pclass                                          Name     Sex  \\\n",
       "0          892       3                              Kelly, Mr. James    male   \n",
       "1          893       3              Wilkes, Mrs. James (Ellen Needs)  female   \n",
       "2          894       2                     Myles, Mr. Thomas Francis    male   \n",
       "3          895       3                              Wirz, Mr. Albert    male   \n",
       "4          896       3  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  female   \n",
       "\n",
       "    Age  SibSp  Parch   Ticket     Fare Cabin Embarked  \n",
       "0  34.5      0      0   330911   7.8292   NaN        Q  \n",
       "1  47.0      1      0   363272   7.0000   NaN        S  \n",
       "2  62.0      0      0   240276   9.6875   NaN        Q  \n",
       "3  27.0      0      0   315154   8.6625   NaN        S  \n",
       "4  22.0      1      1  3101298  12.2875   NaN        S  "
      ]
     },
     "execution_count": 206,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test = pd.read_csv(\"titanic_test.csv\")\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "由于逻辑回归模型不允许数据中有缺失值，因此我们需要检查titanic_test是否存在数据缺失。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.236038100Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 418 entries, 0 to 417\n",
      "Data columns (total 11 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  418 non-null    int64  \n",
      " 1   Pclass       418 non-null    int64  \n",
      " 2   Name         418 non-null    object \n",
      " 3   Sex          418 non-null    object \n",
      " 4   Age          332 non-null    float64\n",
      " 5   SibSp        418 non-null    int64  \n",
      " 6   Parch        418 non-null    int64  \n",
      " 7   Ticket       418 non-null    object \n",
      " 8   Fare         417 non-null    float64\n",
      " 9   Cabin        91 non-null     object \n",
      " 10  Embarked     418 non-null    object \n",
      "dtypes: float64(2), int64(4), object(5)\n",
      "memory usage: 36.1+ KB\n"
     ]
    }
   ],
   "source": [
    "titanic_test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "从以上输出可见，`Age`、`Fare`、`Cabin`存在缺失值。其中`Fare`和`Cabin`不属于回归模型的自变量，即使缺失也不会影响预测，因此可以忽略；`Age`需要我们进行和针对`cleaned_titanic_train`同样的操作，即用平均值填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.242109300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 208,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test['Age'] = titanic_test['Age'].fillna(titanic_test['Age'].mean())\n",
    "titanic_test['Age'].isna().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "下一步是给模型中的分类变量引入虚拟变量，但在引入前我们需要先把分类变量的类型转换为Category，并且通过`categories`参数，让程序知道所有可能的分类值。这样做的原因是，预测数据包含的分类可能不全。我们需要确保引入虚拟变量的时候，不会漏掉某个或某些分类。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.247854300Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "titanic_test['Pclass'] = pd.Categorical(titanic_test['Pclass'], categories=['1', '2', '3'])\n",
    "titanic_test['Sex'] = pd.Categorical(titanic_test['Sex'], categories=['female', 'male'])\n",
    "titanic_test['Embarked'] = pd.Categorical(titanic_test['Embarked'], categories=['C', 'Q', 'S'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "下一步，给模型用到的分类变量引入虚拟变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.251089500Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId                                          Name   Age  SibSp  \\\n",
       "0          892                              Kelly, Mr. James  34.5      0   \n",
       "1          893              Wilkes, Mrs. James (Ellen Needs)  47.0      1   \n",
       "2          894                     Myles, Mr. Thomas Francis  62.0      0   \n",
       "3          895                              Wirz, Mr. Albert  27.0      0   \n",
       "4          896  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  22.0      1   \n",
       "\n",
       "   Parch   Ticket     Fare Cabin Embarked  Pclass_2  Pclass_3  Sex_male  \n",
       "0      0   330911   7.8292   NaN        Q         0         0         1  \n",
       "1      0   363272   7.0000   NaN        S         0         0         0  \n",
       "2      0   240276   9.6875   NaN        Q         0         0         1  \n",
       "3      0   315154   8.6625   NaN        S         0         0         1  \n",
       "4      1  3101298  12.2875   NaN        S         0         0         0  "
      ]
     },
     "execution_count": 210,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test = pd.get_dummies(titanic_test, drop_first=True, columns=['Pclass', 'Sex'], dtype=int)\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "查看一下模型需要的输入变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.260253Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "const        4.061982\n",
       "Age         -0.039495\n",
       "FamilyNum   -0.218627\n",
       "Pclass_2    -1.179763\n",
       "Pclass_3    -2.345823\n",
       "Sex_male    -2.785398\n",
       "dtype: float64"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "由于我们在数据整理步骤建立了`FamilyNum`变量，此处也需要对预测数据加上此变量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.517897700Z",
     "start_time": "2024-04-08T10:02:38.265440800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>PassengerId</th>\n",
       "      <th>Name</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "      <th>Pclass_2</th>\n",
       "      <th>Pclass_3</th>\n",
       "      <th>Sex_male</th>\n",
       "      <th>FamilyNum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>892</td>\n",
       "      <td>Kelly, Mr. James</td>\n",
       "      <td>34.5</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330911</td>\n",
       "      <td>7.8292</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>893</td>\n",
       "      <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>363272</td>\n",
       "      <td>7.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>894</td>\n",
       "      <td>Myles, Mr. Thomas Francis</td>\n",
       "      <td>62.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>240276</td>\n",
       "      <td>9.6875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>895</td>\n",
       "      <td>Wirz, Mr. Albert</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>315154</td>\n",
       "      <td>8.6625</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>896</td>\n",
       "      <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3101298</td>\n",
       "      <td>12.2875</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId                                          Name   Age  SibSp  \\\n",
       "0          892                              Kelly, Mr. James  34.5      0   \n",
       "1          893              Wilkes, Mrs. James (Ellen Needs)  47.0      1   \n",
       "2          894                     Myles, Mr. Thomas Francis  62.0      0   \n",
       "3          895                              Wirz, Mr. Albert  27.0      0   \n",
       "4          896  Hirvonen, Mrs. Alexander (Helga E Lindqvist)  22.0      1   \n",
       "\n",
       "   Parch   Ticket     Fare Cabin Embarked  Pclass_2  Pclass_3  Sex_male  \\\n",
       "0      0   330911   7.8292   NaN        Q         0         0         1   \n",
       "1      0   363272   7.0000   NaN        S         0         0         0   \n",
       "2      0   240276   9.6875   NaN        Q         0         0         1   \n",
       "3      0   315154   8.6625   NaN        S         0         0         1   \n",
       "4      1  3101298  12.2875   NaN        S         0         0         0   \n",
       "\n",
       "   FamilyNum  \n",
       "0          0  \n",
       "1          1  \n",
       "2          0  \n",
       "3          0  \n",
       "4          2  "
      ]
     },
     "execution_count": 212,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titanic_test['FamilyNum'] = titanic_test['SibSp'] + titanic_test['Parch']\n",
    "titanic_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "接下来构建我们要输入给模型进行预测的变量，需要和模型训练时的输入一致。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.520110600Z",
     "start_time": "2024-04-08T10:02:38.274829200Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "X_test = titanic_test[['Age', 'FamilyNum', 'Pclass_2', 'Pclass_3', 'Sex_male']]\n",
    "X_test = sm.add_constant(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "现在就可以调用逻辑回归模型的`predict`方法，获得预测的幸存概率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:38.520110600Z",
     "start_time": "2024-04-08T10:02:38.280107700Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      0.478514\n",
       "1      0.879434\n",
       "2      0.236473\n",
       "3      0.552361\n",
       "4      0.940242\n",
       "         ...   \n",
       "413    0.520230\n",
       "414    0.925647\n",
       "415    0.439306\n",
       "416    0.520230\n",
       "417    0.411858\n",
       "Length: 418, dtype: float64"
      ]
     },
     "execution_count": 214,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted_value = model.predict(X_test)\n",
    "predicted_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "source": [
    "我们获得了逻辑回归模型预测的`titanic_test.csv`里，泰坦尼克号乘客的幸存概率。我们可以把概率大于等于0.5的预测为幸存，小于0.5的预测为遇难，输出一下这个最终的预测结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:02:57.822507100Z",
     "start_time": "2024-04-08T10:02:57.798884900Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      False\n",
       "1       True\n",
       "2      False\n",
       "3       True\n",
       "4       True\n",
       "       ...  \n",
       "413     True\n",
       "414     True\n",
       "415    False\n",
       "416     True\n",
       "417    False\n",
       "Length: 418, dtype: bool"
      ]
     },
     "execution_count": 217,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predicted_value = predicted_value > 0.5\n",
    "predicted_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-04-08T10:03:52.534836500Z",
     "start_time": "2024-04-08T10:03:52.516804800Z"
    },
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "## 输出csv文件\n",
    "#predicted_value.to_csv('predicted_value.csv', index=True)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
